회고록
부스트캠프 결과가 지난 화요일에 발표됐다. 나름 3테케를 통과해 기대하고 있었는데 탈락이라는 말을 본 순간 멘탈이 흔들렸다. 부스트캠프는 작년부터 도전해서 계속 지원했었고, 이번에도 탈락을 하게되니 마음이 안정되기가 쉽진 않았다. 그만큼 정말로 참여하고 싶었던 교육 프로그램이었고, 이번엔 탈락했지만 다음에 또 도전해 좋은 결과를 얻을 수 있도록 열심히 준비해야겠다.
이제 슬슬 하반기가 다가오고 있다. 이력서와 포트폴리오를 점검하고 잠시 미뤄뒀던 CS 공부를 다시 진행해야겠다. 취업까지 얼마나 오랜시간이 걸릴진 모르겠지만, 준비된 사람에겐 기회가 올 것이고 그 기회를 잡기 위해 최선을 다할 것이다.
멀 배웠는데?
Java 기반 백엔드 프레임워크 Spring의 전반적인 개념에 대해 배웠다.
- MVC
- M: model
사용자가 필요로 하는 데이터들을 관리하고 가공하는 역할을 담당
- V: view
사용자에게 보여지는 화면을 담당
- C: Controller
데이터(모델)과 사용자 인터페이스(뷰)를 연결하는 다리 역할을 담당
- Servlet
사용자의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- 웹 상에서 요청에 따른 응답까지의 처리 과정
- 사용자가 데이터를 입력하면 URL에 저장되어 요청이 발생
- HTTP Request가 호출되어 Servlet Container로 전송
- Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성
- 사용자가 요청한 URL이 어느 Servlet에 대한 요청인지 탐색
- 해당 Servlet에서 서비스 메소드를 호출한 뒤, 사용자의 GET/POST여부에 따라 doGet() or doPost() 호출
- GET/POST 메소드는 동적 페이지를 생성한 뒤, HttpServletResponse 객체에 응답을 보냄
- 응답 결과는 request 혹은 session에 저장되고, 사용자가 요청했던 view로 전달
(HttpServletResponse 객체 내 request 혹은 session에 저장된다)
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸
- Framework
개발의 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조이자 소프트웨어 개발의 뼈대 역할
클래스와 라이브러리가 합쳐진 형태
- 스프링 프레임워크(Spring)
- Java 기반의 웹 프레임워크
- POJO(Plain Old Java Object) 방식
특정 인터페이스를 직접 구현하거나 상속받을 필요가 없어 기존 라이브러리를 지원하기 용이, 객체가 경량.
- 제어 역행(IOC : Inversion of Control)
외부 라이브러리 코드가 개발자의 코드를 호출. 즉 제어권이 사용자가 아닌 프레임워크에게 있어 필요에 따라 스프링이 사용자의 코드를 호출.
- 의존성 주입(DI : Dependency Injection)
구성 컴포넌트 간의 의존관계가 소스코드 내부가 아닌 외부에서 설정을 통해 정의되는 방식. 코드의 재사용성을 높이고 모듈간의 결합도를 낮춤.
- 관점 지향 프로그래밍(AOP : Aspect-Oriented Programming)
로깅, 트랜잭션, 보안 등 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리. 스프링에서는 어노테이션을 활용해 반복할당을 줄임.
- 생명주기 관리
자바 객체의 생성, 소멸을 직접 관리해 필요한 객체만 사용할 수 있음.
- Spring Web Layer
- Web Layer
@Controller와 JSP 등의 View 영역
- Service Layer
@Service 영역으로 @Transactional(트랜잭션)이 사용되는 곳
- Repository Layer
데이터베이스와 같은 데이터 저장소에 access(접근)하는 영역. DAO(Data Access Object) 영역
- DTO & Domain Model
계층 간 데이터 교환을 위한 객체인 DTO의 영역.
도메인 모델은 모든 사람이 동일한 관점에서 이해할 수 있고 공유할 수 있도록 단순화한 것.
JPA를 사용한다면 @Entity가 사용되는 영역이 Domain Model에 해당한다.
클라이언트(브라우저)
-> html -> Form -> enctype = "multipart/form-data"
method = "post"
<input type= "file" />
서버(was)
-> 라이브러리(파일은 참조, 업로드처리)
# 라이브러리가 제공하는 파일을 참조하거나 파라미터를 받는 일을 한다
앞으로의 계획
- 자바 기반 웹 서비스 개념과 스프링 프레임워크 개념에 대해 공부하기
- @Component와 @Bean의 차이 공부해보기
- @Repository @Mapper 공부해보기
TIL