Spring

· Spring
서론: 왜 직접 HTTP 서버를 만들어보는가?웹 개발을 할 때 우리는 대부분 Spring Boot 같은 프레임워크를 사용하여 서버를 구축한다.Spring Boot는 내부적으로 Tomcat, Jetty 같은 내장 서버를 사용하기 때문에, HTTP 요청이 어떻게 처리되는지 직접 고민할 일이 거의 없다. 그러나 만약 내장 서버가 없다면? 어떻게 동작하는지 예상이 가는가?? 라는 질문에 내가 대답하지 못했어서 시작하게 되었다. HTTP 서버의 동작 원리를 직접 구현해 본다면Socket 프로그래밍: 클라이언트와 서버 간의 데이터 전송 원리멀티스레딩 기초: 여러 클라이언트 요청을 동시에 처리하는 방법HTTP 프로토콜 구조: HTTP 요청(Request)과 응답(Response)의 동작원리 및 기본적인 웹 서버의 구..
· Spring
목차 개요 웹 애플리케이션에서 사용자 인증은 필수적인 요소 중 하나이고 회원 기능이 있다면 회원 식별을 위한 인증절차는 필수적이다. 따라서 이번 블로그 포스팅에서는 Spring Security에서 사용자 인증 정보를 얻어오는 두 가지 주요 방법, `Principal`과 `SecurityContextHolder`의 차이점에 대해 살펴보겠다. SecurityContextHolder 개요 Spring Security는 웹 애플리케이션에서 보안(인증 및 권한 관리)을 다루는 데 사용되는 프레임워크이다. 보안 컨텍스트는 `SecurityContextHolder`를 통해 관리되며, 현재 인증된 사용자는 `Principal` 또는 `Authentication` 객체를 통해 나타낼 수 있다. Servlet Authen..
· Spring
목차 개요 제목 정하기가 무척이나 어려웠다. 문제를 해결하고 보니 복합적인 문제였기 때문이다. 최종적으로 본 포스팅에서 다룰 내용은 다음과 같다. 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를 매핑하려고 했다. 이..
· Spring
목차 개요 JPA에서 중요한 주제 중 하나인 FetchType에 대해 이야기해보려고 한다. FetchType은 데이터베이스에서 엔티티를 조회할 때 연관된 엔티티를 언제 로드할 것인지 결정하는 로딩 전략으로 EAGER와 LAZY라는 두 가지 전략이 있는데 각 전략에 대해서 예시를 통해 어떤 환경에 쓰여야하는지 확인해보자 FetchType.EAGER EAGER 로딩 전략은 한 엔티티가 로드될 때 관련된 모든 엔티티를 함께 로드하는 방식 사용자의 역할(User Role)과 같이 사용자 정보를 불러올 때마다 빈번하게 사용하는 정보의 경우 유용하게 사용됩니다. 예를 들어, 대부분의 웹 서비스에서는 일반 사용자와 관리자의 권한 차이로 인해 사용자가 수행할 수 있는 동작이 달라진다. 이런 경우, 사용자가 로그인하거나..
· Spring
목차 개요 본격적으로 코드 작성을 해보자 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 정보전달만의 기능을..
· Spring
목차 개요 프로젝트를 진행하던 도중 JPA를 사용하여 Java 엔티티 클래스를 구성하고 있었는데 그중 @Column 애노테이션을 이용하여 기본값(default value) 설정을 진행하였지만 새 인스턴스를 생성하고 DB 내부를 확인해보니 설정하였던 디폴트값이 적용되지 않았기에 글을 써보게 되었다. 문제 상세분석 'FavoriteDepartment' 라는 클래스에서 회원들이 즐겨찾기한 기관 및 학과를 저장할때 저장 시에 팝업알림의 유무를 특정 필드isAlert을 통해 구현하고자 했다. 따라서 애너테이션을 이용해 기본값으로 `true`를 갖도록 설정하려고 했다. 이러한 설정을 통해 기대했던 동작은 FavoriteDepartment 인스턴스를 생성하면서 isAlert 필드가 자동적으로 true로 설정되는 것이..