안녕하세요!
항상 나아가는 개발자 pink_salt 핑솔입니다!
코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다.
웹 개발에 관심이 많은 사람으로 이제 본격적으로 공부해보려고해요!

node.js, react를 이용해서 간단한 웹 프로젝트를 진행해 본 적이 있습니다.
백엔드 파트를 맡아 진행하여 회원가입, 게시물 관련 기능들을 개발하였습니다.
하지만 아직 머리 속에 뒤죽박죽...
이번 기회에 spring boot를 배우면서 머릿 속에 정리를 하고 웹개발 백엔드 쪽에 대해서 열심히 학습해보려고 합니다!
'Spring Boot 웹 개발 입문'강의를 듣고 공부한 내용을 정리하여 포스팅을 진행하겠습니다.
강의 특징
- Spring Framework는 러닝 커브가 매우 높습니다.
- Spring을 깊이 있게 이해하기 위해서는
- 객체 지향 설계 원칙과 디자인 패턴
- IoC, DI, AOP, Bean과 Context의 개념이 필요합니다.
- 본 강의는 Spring Boot로 웹 애플리케이션을 직접 만드는 활용에 집중되어 있습니다.
- 필수 이론 설명은 포함되어 있습니다.
- 다양한 이론들은 이후 코스에 단계적으로 설명할 예정입니다.
본 코스 프로젝트로는
Todo List 웹 애플리케이션을 개발합니다.
- Todo 항목을 저장, 삭제 조회
Frontend 코드는 주어지고, API 문서를 읽고 이해하여 해당하는 REST API를 개발할 수 있습니다.
일단 웹 개발에 대한 내용, Web Framework에 대해 짚고 넘어가보겠습니다!
웹 서비스 개발과 Web Framework의 이해
웹 서비스 개발 및 운영의 직군
- 퍼블리싱, 마크업 개발
- 프론트엔드 개발
- 웹 프론트엔드 개발
- 모바일 앱 개발
- 백엔드 개발
- REST API 개발
- 프론트엔드에서 호출하는 API
- DB 설계, 운영
- 시스템 엔지니어링, 인프라 엔지니어링
웹 서비스 개발의 기본 구조
웹 서비스는 일단 프론트엔드가 있고 백엔드와 서로 통신합니다. 그리고 백엔드는 데이터베이스와 연결되어 있습니다.
사용자가 화면(프론트엔드)에서 액션을 취하면 요청이 서버(백엔드)로 가고 데이터베이스에서 데이터를 조회하고 처리한 것을 다시 프론트엔드로 결과를 보여줍니다.
그리고 이러한 웹서비스를 지탱하는 infrastructure 들이 있는데 서버, 네트워킹, 스토리지, 보안, 클라우드 등의 기술이 있습니다.
위에서 말한 웹 서비스 운영 직군에서 하는 일에 대해서 알아보겠습니다.
퍼블리싱/마크업 개발
- 사용자에게 노출되는 웹 화면을 개발합니다.
- 디자인을 HTML/CSS 코드로 옮기는 과정을 합니다.
- HTML, CSS를 주로 사용하고 Javascript를 일부 사용합니다.
- 화면의 정보와 구조를 나타내기 위해 HTML을 사용합니다.
- 화면의 스타일을 꾸미기 위해 CSS를 사용합니다.
- 사용자 이벤트를 처리하기 위해 Javascript를 사용합니다.
프론트엔드 개발
- 사용자 화면과 백엔드(DB)와의 중간 커뮤니케이션 역할을 합니다.
- 사용자의 입력/이벤트를 받아 백엔드로 전송합니다.
- 백엔드의 데이터를 받아 화면에 노출합니다.
- Javascript, Jquery 등이 전통적으로 많이 사용됩니다.
- 최근에는 VueJS, ReactJS, AngularJS 등의 프론트엔드를 위한 Framework 등이 많이 사용되고 있습니다.
백엔드 개발
- 웹 서비스의 비즈니스 로직을 처리하는 부분입니다.
- 브라우저에서의 사용자 요청을 받아 적절하게 처리합니다.
- 로직 처리
- DB 연동
- 외부 시스템 연동(Mail, CRM 등)
- Spring, Django,Flask, NodeJS 등의 Web Framework를 활용하여 개발합니다.
DB 설계 / 운영
- 웹 서비스의 데이터가 저장될 DB를 설계하고 DBMS를 운영, 관리합니다.
- 데이터는 웹 서비스의 가장 중요한 요소 중 하나입니다.
- DB 분석/설계와 DBMS 운영은 다른 역할이지만 기업에 따라 한 사람이 다 할 수도 아니면 따로 역할을 할 수도 있습니다.
- RDBMS로는 Oracle, MySQL, PostgreSQL, MSSQL 등이 주로 사용됩니다.
- NoSQL로는 MongoDB, Cassandra, DynamoDB, Elasticsearch 등이 주로 사용됩니다.
시스템 엔지니어링, 인프라 엔지니어링
- 웹 서비스가 운영될 기간 인프라를 설계하고 운영합니다.
- 서버, 네트워킹, 스토로지, 보안 등 설계, 구축, 운영합니다.
- 기존에는 온 프레미스 기반의 시스템을 운영했습니다.
- 최근에는 클라우드 및 컨테이너 기반의 시스템 운영으로 전화하고 있습니다.
- AWS, Azure, GCP, NCP ...
- Docker, Kubernetes
SW Framework?
- SW 개발을 효율적으로 하기 위한 반제품을 말합니다.
- 특정 분야의 SW 개발에 필요한 공통 기능을 제공합니다.
- 사용자는 Framework에 필요한 기능을 추가하여 전체 애플리케이션을 완성할 수 있습니다.
Web Framework
- Spring (Java)
- Flask, Django (Python)
- NodeJs (Javascript)
- Laravel (PHP)
- Rails (Ruby)
-> Web Framework는 웹 개발을 위한 소프트웨어 반제품입니다!
Spring Framework 소개
- Rod Johnson에 의해 개발되었고, 2004년에 1.0 버전이 출시되었습니다.
- 2017년에 Spring Framework 5.0이 출시되었습니다.
- 2014년에는 Spring Boot 1.0이 출시 되었고, 2022년 기준 Spring Boot 2.6.3입니다.
- Spring Framework는 웹 개발만을 위한 Framework는 아닙니다. 하지만 주로 웹 애플리케이션 개발을 위해 활용됩니다.
- 작은 게시판과 같은 웹 애플리케이션부터 Netflix 수준의 대규모 애플리케이션을 개발하는데 적용 가능합니다.
- 국내외 많은 기업들이 Spring Framework를 핵심 기술로 활용 중입니다.
2018년 Netflix 공식 기술블로그에서 원래는 자신들이 만든 프레임워크를 사용하고 있었지만 자신들의 핵심 Java framework로 Spring Boot로 도입한다고 하였습니다.
Netflix는 글로벌 서비스이고 정말 거대한 서비스인데도 Spring Boot를 쓴다는 것은 Spring Boot가 다 감당할 수 있다라는 것을 알 수 있습니다.
또한 국내 기업들도 많이 쓰고 있는데요. 채용공고를 보면 국내 Naver, kakao, toss, LINE 등 모두 Spring Framework를 사용하고 있습니다.
Spring Framework의 장점
- 경량화 된 Java Framework
- POJO의 사용으로 재사용가능한 코드 개발 가능
- DI와 AOP의 적용
- Transaction 관리의 편의성
- MVC 아키텍처의 지원
- 테스트가 용이
- 높은 보안성
이 장점들이 보통 말하는 장점들입니다. 아직 장점들이 와닿지는 않지만 이런 것이 있다는 것을 알고 넘어가도록 하겠습니다.(뒤에서 찬찬히 알아보아요!)
우리가 쉽게 이해할 수 있는 장점과 단점을 살펴보겠습니다.
Spring Framework 장점
방대한 프로젝트가 가능하다!
- Spring Framework는 22개 카테고리의 수 백개의 프로젝트를 보유하고 있습니다.
- 대규모의 웹 애플리케이션 개발/운영을 위한 거의 모든 기술을 제공합니다.(밑바닥에서부터 하지 않아도 된다!)
끊임 없는 개선이 가능하다!
- SW 시스템은 점점 커지고 복잡한데 더 나은 SW 시스템을 위한 다양한 기술과 아키텍처가 소개되고 있습니다.
- 마이크로서비스 아키텍처
- NoSQL
- 클라우드 컴퓨팅 및 컨테이너
- Spring Framework는 변화하는 기술에 빠르게 대응하여 꾸준히 새로운 프로젝트를 출시합니다.
- Spring Cloud 프로젝트
- Spring Native
- 등...
Spring Framework 단점
높은 러닝 커브..
- Bean, DI, AOP, 객체지향 설계, 디자인 패턴 등 다양한 개념 이해가 필요합니다.
- Spring Framework는 엔터프라이즈 급 대규모 서비스 개발을 위한 목적으로 개발 됩니다.
- SW 의 유연한 확장성을 위해 다양한 기술들이 내포되어 있습니다.
복잡한 설정
- XML 지옥..?
- 간단한 웹 애플리케이션 개발을 위해서도 상당한 수준의 설정이 필요합니다...
- 무겁다? 대기업에서 쓸만한 기술?
- Spring Boot가 출시되며 문제가 해결!!!되었습니다.
- 자동화된 설정, 간편화된 의존성 관리 등
Spring Boot란?
공식 홈페이지에 따르면
Spring Boot makes it easy to create stand-alone, production-grade
Spring based Applications that you can "just run".
빠르고 편하게 개발이 가능합니다!
Spring Framework를 보다 손쉽게 활용할 수 있게 지원하는 기술입니다. Spring Framework를 기반으로 합니다!
설정, 의존성 관리, 애플리케이션 모니터링, 서버의 실행 등을 가볍고 빠르게 수행 가능합니다.
기능을 살펴볼까요?
Spring Boot의 주요 기능
- 설정 간편화를 위한 Auto Configuration
- 의존성 관리를 위한 Starter Project
- 배포 프로세스 간소화를 위한 Embedded WAS
- 애플리케이션의 모니터링을 위한 Actuator
Spring Boot 개발을 시작하기 전에 실습 환경을 만들어야합니다.
Java 기반이기 때문에 JDK11을 설치해야합니다.
그리고 IntelliJ를 IDE로 쓸 것이기 때문에 밑의 게시물을 참고하여 진행해주시면 감사하겠습니다.
https://keepgoingforever.tistory.com/25?category=1194805
Java 프로그래밍 기본 (3) - java 프로그래밍에 사용할 SW
안녕하세요~ 항상 나아가는 개발자 pink_salt 핑솔입니다! 운이 좋게도 코드프레소 Java 웹 개발 체험단 활동을 하고 있습니다. 3번째 java 포스팅인데도 이미 저에게 좋은 영향을 끼치고 있는 활동
keepgoingforever.tistory.com
그리고 Postman을 설치할 것입니다.
Postman
- REST API를 통합 관리하기 위한 SW입니다.
- Spring Boot로 구현하는 API를 테스트하기 위하 용도로 사용할 것입니다.
- https://www.postman.com/downloads/ 접속하여 다운로드, 설치를 진행하겠습니다.
Download Postman | Get Started for Free
Try Postman for free! Join 17 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com
사이트에 들어가셔서 다운로드 버튼을 누르셔서 진행하시면 됩니다.
다운로드 되시면 실행파일을 실행합니다.
설치가 완료되시면 계정을 만들어도 안 만드셔도 사용이 가능합니다.
계정이 있으면 유용하실 겁니다! 왜냐하면 이 전에 사용한 기록들이 컴퓨터가 바뀌어도 그대로 남아있기 때문입니다!
저는 구글 계정을 이용해서 로그인을 진행했습니다!
postman은 크롬과 비슷하게 탭 형태로 되어 있습니다.
+버튼을 누르면 탭이 생깁니다.
탭 하나 당 서버에 API를 요청할 수 있는 단위 입니다.
Spring Boot 애플리케이션 만들어보기! First!
- spring initializr를 활용한 Spring Boot 프로젝트 생성 및 다운로드
- 다운로드한 Spring Boot 프로젝트를 IntelliJ에서 import
- 추가 코드 개발
- Spring Boot 애플리케이션 실행
- 웹 브라우저 또는 Postman을 활용해서 테스트!
Spring initializr
- Spring Boot 프로젝트를 쉽게 구성할 수 있게 지원하는 사이트입니다.
- https://start.spring.io/
IDE에 따라 지원해주는 경우가 있습니다. IntelliJ Ultimate 이상에서는 자동으로 해줍니다.
이걸 사용해서 해보겠습니다.
이럼 프로젝트 폴더가 생성됩니다.
압축폴더를 풀어주고 IntelliJ에서 File-> Open -> 폴더 경로로 들어가서 열어줍니다.
그런데 처음에 problem이 많이 생겼다.
이것은 프로젝트 이름 옆에서 오른쪽 마우스를 누르고
New 밑의 Add Frameworks~ 를 누른 후에
위의 사진의 Spring을 선택하면 된다.
그리고 프로젝트를 게속 진행하겠습니다.
일단 패키지를 추가합니다.
controller package 추가
그리고 만든 controller 패키지 밑에 class를 생성합니다.
그리고 어노테이션을 추가해줍니다.
클래스 안에 메소드를 만들겠습니다.
그리고 처음 만들어진 Java 파일에서 우클릭해서 Run시킵니다.
그럼 밑에 Spring Boot가 실행되었다는 것을 알 수 있습니다.
chrome에서 실행해보겠습니다.
갑자기 실행이 되지 않았는데요??????????
무슨일인가 봤더니
Correct the classpath of your application so that it contains a single, compatible version of org.springframework.context.ConfigurableApplicationContext
이런 에러가 떴습니다. 제가 사용하고 있는 IntelliJ Ultimate라서 그런건가...?위에서 Add framework~~를 Spring으로 해줘서 그런 것 같기도해요..!
해결방법
pom.xml 파일 에 Spring 종속성을 추가한 경우 프로젝트 디렉토리 의 lib 폴더에 있는 Spring 종속성과 충돌할 수 있습니다 . lib 폴더를 삭제하면 이 문제가 해결됩니다. (삭제하기 전에 프로젝트가 lib 폴더 의 다른 라이브러리에 의존하지 않는지 확인하십시오 ).
링크 :
https://stackoverflow.com/questions/64997286/correct-the-classpath-of-your-application-in-a-springboot-configuration-in-int
그래서 제 프로젝트에서 lib폴더를 삭제하니까 되더라고요!!
굳굳!!!ㅎㅎ
크롬을 통해서 Hello Spring Boot!!를 확인할 수 있습니다.
우리가 Spring boot에서 java 언어로 만들어 놓은 HelloWorldController 클래스의 메소드 hello()를 크롬 브라우저가 네트워크를 통해서 호출을 한 것을 의미합니다.
저만의 첫 애플리케이션을 만들어보았습니다.
이렇게 만들어지는 것을 보니 좀 두근거리네요!
더 열심히 배워서 저만의 웹 서비스를 만들 수 있는 날까지 화이팅!
다음 게시물에서는 Web 기초 개념, HTML 기초에 대해서 알아보도록 하겠습니다.
열심히 나아가는 개발자 핑솔이었습니다.
코드프레소 URL: https://www.codepresso.kr/
프리미엄 IT 교육 서비스 - 코드프레소
www.codepresso.kr
'WEB study > WEB(Springboot)' 카테고리의 다른 글
Spring Boot와 MyBatis의 연동 - Data Access Layer의 개념 (0) | 2022.03.03 |
---|---|
Spring Bean 개념과 의존성 주입 - Spring Service 계층, Spring Bean, 의존성 주입 (0) | 2022.02.23 |
Spring Boot 웹 개발 입문 - Request 파라미터, Response 데이터, JSON 포맷, HTTP method, request body, REST API 문서 활용 (0) | 2022.02.09 |
Spring Boot 웹 개발 입문 - Spring Boot 컨트롤러와 REST API (1) (0) | 2022.02.05 |
Spring Boot 웹 개발 입문 - Web 의 기초 개념과 HTML의 기초 활용 (0) | 2022.02.05 |