개요Spring MVC를 사용하면서 자연스럽게 사용하고 있는 것이 바로 @Controller, @GetMapping, @PostMapping과 같은 애너테이션 기반 컨트롤러 매핑이다. 그러나 내부적으로 이 컨트롤러들이 실제로 어떻게 등록되고 매핑되는지 이해하는 개발자는 많지 않다.이번 글에서는 Spring MVC가 내부적으로 어떻게 컨트롤러를 등록하고, 요청이 왔을 때 어떻게 적절한 컨트롤러 메서드를 찾아 실행하는지 살펴본다. DispatcherServlet 이란?Spring MVC에서 가장 중요한 클래스는 바로 DispatcherServlet이다. DispatcherServlet은 프론트 컨트롤러 역할을 하며, 모든 요청의 진입점이다. 이해를 하기 위해서는 구동 시점에 따라서 어떤 일이 발생하는지를 확..
서론: 왜 직접 HTTP 서버를 만들어보는가?웹 개발을 할 때 우리는 대부분 Spring Boot 같은 프레임워크를 사용하여 서버를 구축한다.Spring Boot는 내부적으로 Tomcat, Jetty 같은 내장 서버를 사용하기 때문에, HTTP 요청이 어떻게 처리되는지 직접 고민할 일이 거의 없다. 그러나 만약 내장 서버가 없다면? 어떻게 동작하는지 예상이 가는가?? 라는 질문에 내가 대답하지 못했어서 시작하게 되었다. HTTP 서버의 동작 원리를 직접 구현해 본다면Socket 프로그래밍: 클라이언트와 서버 간의 데이터 전송 원리멀티스레딩 기초: 여러 클라이언트 요청을 동시에 처리하는 방법HTTP 프로토콜 구조: HTTP 요청(Request)과 응답(Response)의 동작원리 및 기본적인 웹 서버의 구..
목차 개요 웹 애플리케이션에서 사용자 인증은 필수적인 요소 중 하나이고 회원 기능이 있다면 회원 식별을 위한 인증절차는 필수적이다. 따라서 이번 블로그 포스팅에서는 Spring Security에서 사용자 인증 정보를 얻어오는 두 가지 주요 방법, `Principal`과 `SecurityContextHolder`의 차이점에 대해 살펴보겠다. SecurityContextHolder 개요 Spring Security는 웹 애플리케이션에서 보안(인증 및 권한 관리)을 다루는 데 사용되는 프레임워크이다. 보안 컨텍스트는 `SecurityContextHolder`를 통해 관리되며, 현재 인증된 사용자는 `Principal` 또는 `Authentication` 객체를 통해 나타낼 수 있다. Servlet Authen..
목차 개요 제목 정하기가 무척이나 어려웠다. 문제를 해결하고 보니 복합적인 문제였기 때문이다. 최종적으로 본 포스팅에서 다룰 내용은 다음과 같다. 1. Spring boot JPA 스키마 생성 옵션 (create, create-drop, update .. 등등) 2. 엔티티간 관계 정의(@JoinColumn 오버라이드 옵션 사용) 3. JPA Hibernate 컬럼 명명 전략 4. MySQL workbench 내 FK 설정법 5. SQL Error :1146, SQLState: 42S02/ SQL Error:1054, SQLState: 42S22 6. Unknown column ~ in 'field list' 초기 문제 분석 Member 엔티티에 OneToMany 관계로 Event를 매핑하려고 했다. 이..
목차 개요 JPA에서 중요한 주제 중 하나인 FetchType에 대해 이야기해보려고 한다. FetchType은 데이터베이스에서 엔티티를 조회할 때 연관된 엔티티를 언제 로드할 것인지 결정하는 로딩 전략으로 EAGER와 LAZY라는 두 가지 전략이 있는데 각 전략에 대해서 예시를 통해 어떤 환경에 쓰여야하는지 확인해보자 FetchType.EAGER EAGER 로딩 전략은 한 엔티티가 로드될 때 관련된 모든 엔티티를 함께 로드하는 방식 사용자의 역할(User Role)과 같이 사용자 정보를 불러올 때마다 빈번하게 사용하는 정보의 경우 유용하게 사용됩니다. 예를 들어, 대부분의 웹 서비스에서는 일반 사용자와 관리자의 권한 차이로 인해 사용자가 수행할 수 있는 동작이 달라진다. 이런 경우, 사용자가 로그인하거나..
목차 개요 본격적으로 코드 작성을 해보자 Entity - 유저 클래스 카피를 위한 코드링크 GitHub - Apptive2022-1/apptive-18th-team4-backend: Customized services with the information & schedules and Finding nearest empt Customized services with the information & schedules and Finding nearest empty office location to user - GitHub - Apptive2022-1/apptive-18th-team4-backend: Customized services with the informat... github.com 정보전달만의 기능을..