Back-End/Server11 [WAS] Java 로 순수하게 서버 구축하기 (2) 들어가며이번 글을 마지막으로 WAS 구축하기는 마무리하려고 합니다...! 사이드 프로젝트에 좀 더 힘을 주기 위해서...따라서, 해당 글에서 WAS를 구축하면서 이해한 부분들을 최대한 담고자 노력하였습니다.Front ControllerFront Controller 는 웹 어플리케이션으로 들어오는 모든 HTTP 요청을 가장 먼저 받아들이고, 해당 요청과 부합하는 컨트롤러에 의해 요청을 처리한 후 적절한 결과를 전달하는 컨트롤러 역할을 수행합니다.그리고 이러한 역할이 바로 DispatcherServlet 입니다.물론, 그림과 같이 가장 앞단에서는 Tomcat 에 의해 HttpServletRequest / HttpServletResponse 객체가 생성되고, 그 이후에 필터를 거쳐 DispatcherServl.. 2025. 6. 27. [WAS] Java 로 순수하게 서버 구축하기 (1) 들어가며지금까지 Java/Spring 을 사용하여 REST API Server를 구현하는 경험을 많이 하였지만, 실제 내부적으로 어떻게 동작하는지에 대한 깊은 이해가 떨어진 것 같아서 직접 웹서버를 구축하는 과정을 통해 조금이라도 깊은 이해를 하고자 진행하게 되었습니다!제가 목표하고자 하는 과정을 먼저 진행하신 분의 블로그 글이 있어 링크를 함께 첨부해두겠습니다!* https://onibmag.tistory.com/53목표제가 구현하고자 하는 서버의 역할은 Dispatcher Servlet의 역할입니다. 즉, 클라이언트의 HTTP 요청을 받고 적절한 컨트롤러에게 전달하고 반대로 컨트롤러로부터 전달받은 응답을 클라이언트에게 전달해주는 역할을 수행합니다. 이러한 서버를 구현하기 위해 다음과 같은 순서로 글을.. 2025. 6. 10. [팀 프로젝트] Enum 활용하기. 들어가며기존 프로젝트의 멤버 엔티티는 `Region` 이라는 Enum 하나만으로 지역을 관리하고 있었습니다. 해당 Region 은 '서울특별시', '대전광역시' . . . 처럼 상위 지역만을 나타내고 있었습니다. 하지만 기획의 변경으로 인해 '서울특별시 강남구' 처럼 구 단위까지 포함해야 했습니다.변경 방법변경을 위해서 Enum 으로 관리하던 지역을 따로 테이블을 통해 관리하는 것이 효과적이라는 생각이 먼저 들었습니다. 하지만 이렇게 되면 기존에 사용하던 코드를 모두 변경했어야 하기 때문에 수정의 범위가 너무 커질 것 같다는 생각이 들었습니다. 또한, 지역이라는 값은 데이터의 수정,추과그리고 삭제가 일어나지 않는 고정된 값이기 때문에 DB를 통해 관리하는 방식은 큰 장점이 없을 것 같았습니다.따라서 En.. 2025. 4. 22. [JPA] 영속성 컨텍스트 EntityManager 란?JPA (Java Persistence API)에서 엔티티(Entity)를 관리하는 객체입니다.즉, 데이터베이스와 애플리케이션 사이에서 엔티티의 생명주기를 관리하는 역할을 수행합니다.영속성 컨텍스트란?영속성 컨텍스트란 엔티티를 영구 저장하는 환경입니다. 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 합니다. 엔티티 매니저를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리합니다.영속성 컨텍스트의 구성 요소1차 캐시 : 식별자 기준 엔티티 저장, 중복 쿼리 방지.쓰기 지연 SQL 저장소 : 트랜잭션 커밋 시 DB 반영용 INSERT/UPDATE 모음변경 감지 : Flush 시점에 변경된 필드 자동 감.. 2025. 4. 11. [팀 프로젝트] 유니크 제약 조건과 동시성 문제 들어가며이전에 작성한 글(https://kongdevlog.tistory.com/16)에서 유니크 키 제약 조건에 대한 이해가 부족하여 오버 엔지니어링(+ 잘못된 작업)을 하게되었습니다.해당 과정에 대한 원인을 분석하고 개념을 정리하기 위해 글을 작성합니다.이전 구현@Transactional public MemberLoginServiceDto login(String phoneNumber) { Member member = createOrFindMemberByPhoneNumber(phoneNumber); if (member.isBanned()) { throw new BannedMemberException(); } ... .. 2025. 2. 1. [팀 프로젝트] queryDsl 도입과 테스트 코드 들어가며팀 프로젝트에서 CQRS 패턴을 적용하게 되면서, 조인과 같은 JPQL을 손쉽게 사용함과 직접적인 도메인 노출을 피하기 위해 queryDsl 을 도입하고 query 계층을 사용하기로 하였습니다. 따라서 이에 맞게 queryDsl 코드를 작성함과 동시에 그에 따른 테스트 코드를 작성하는 과정을 기록하기 위해 글을 작성하게 되었습니다.@ElementCollection 을 사용함에 따른 불편함!@ElementCollection @CollectionTable(name = "member_hobbies", joinColumns = @JoinColumn(name = "member_id")) @Column(name = "hobby_id") private Set hobbyIds = new Hash.. 2025. 1. 21. 이전 1 2 다음