Java 47

[개발자랑] ERD

2024년 8월 28일 쯤, 프로젝트를 시작했다. 8월 29일 주제를 선정했고8월 30일부터 9월 3일까지는 MIRO를 통한 이벤트 스토밍,9월 5일부터 9월 8일은 요구사항 명세서,9월 10일부터 9월 12일은 ERD를 작성했다.(수업 이외에 시간에 부담없이 조금씩 하다 보니 오래 걸린 것 같다.) 우리 팀이 정한 주제는 개발자를 위한 커뮤니티로, "개발자랑" 이라는 프로젝트명을 붙여주었다.개발 + 자랑,개발자 + 랑 두 가지 의미가 중의적으로 있는게 참 마음에 든다! 이 서비스의 가장 귀여운 점은회원가입 시 성향테스트를 해서 나온 수식어와 희망 직무를 합쳐 별명(?)을 붙여준다는 점이다 ㅎㅎ  아래는 우리 팀에서 작성한 ERD이다. 연관관계를 쪼개고, 게시판도 여러개 있다보니 테이블이 내 기준 정말 ..

[JPA] 4. EntityLifeCycle

디렉토리 구조 및 공통 클래스 작성하기1. 디렉토리 구조2. EntityManagerGenerator 클래스 작성하기package org.example.section03.entity;public class EntityManagerGenerator { private static EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpatest"); private EntityManagerGenerator() {} public static EntityManager getInstance() { return factory.createEntityManager(); }}3. Menu 클래스 생성하기packa..

[JPA] 2. Persistence Context - EntityManager 생성하기

Persistence Context1. EntityManager엔터티 매니저는 엔터티를 저장하는 메모리 상의 데이터베이스로, 엔터티 저장, 수정, 삭제, 조회 등 엔터티와 관련된 모든 일을 한다.EntityManagerFactory를 통해 만들어진다.엔터티 매니저는 스레드 세이프하지 않기 때문에 동시성 문제가 발생할 수 있어 스레드 간 공유를 하면 안되고,따라서 web의 경우 일반적으로 request scope와 일치시킨다. (하나의 요청을 하나의 엔터티 매니저를 통해 관리)이와 비슷하게 MyBatis에서 sqlSession도 스레드 세이프하지 않기 때문에 하나의 요청 당 하나의 sqlSession을 만들었다.2. EntityManagerFactory엔터티 매니저를 생성할 수 있는 기능을 제공한다.스레드..

[JPA] 1. 개요 및 개발환경 구축

JPA 개요1. JPA란?Java 진영의 ORM(Object Relational Mapping) 기술 표준으로 ORM 기술을 사용하기 위한 표준 인터페이스의 모임이다.JDBC에서 JDBC가 인터페이스고 그 구현체가 Driver였던 것처럼 JPA는 인터페이스, Hibernate는 그 구현체라 생각하면 된다.ORM은 자바 객체와 DB 테이블을 매핑하고 자바 객체 간의 관계를 토대로 SQL을 생성 및 실행할 수 있다.2. JPA의 특징- 영속성 컨텍스트가 엔티티(DB와 매핑되는 자바 객체)를 생명주기를 통해 관리한다.- DBMS별로 Dialect를 제공한다.  (JPA 내부에서 사용하는 SQL 문법인 JPQL을 구동시키면 사용하는 DB별 SQL 구문을 JPA 쪽에서 알아서 만들어준다.) - native SQL..

[Spring Boot] 8. Thymeleaf

Thymeleaf는 SpringBoot에서 공식적으로 지원하는 View 템플릿이다.Thymeleaf의 특징- JSP와 달리 Thymeleaf 문서는 html 확장자를 가지고 있어 JSP처럼 Servlet이 문서를 표현하는 방식이 아니기 때문에   서버 없이도 동작이 가능하다.- SSR 템플릿으로 백엔드에서 HTML을 동적으로 생성한다.- SpringBoot에서 JSP는 별도의 설정이 필요하지만 Thymeleaf는 바로 적용이 가능하다.Thymeleaf의 장단점1. 장점- Natural Templates를 제공한다. (HTML의 기본 구조를 그대로 사용할 수 있으며 HTML 파일을 직접 열어도 동작한다.)  * Natural Templates: 기존 HTML의 마크업 언어를 사용한 디자인 구조로 되어 있는..

[Spring Boot] 6. Interceptor

Spring Interceptor란?Spring Interceptor는 Spring 프레임워크에서 제공하는 기능 중 하나로, 클라이언트의 요청을 가로채서 처리하는 역할을 한다. 이를 통해 공통적인 로직(로깅, 성능 측정, 캐싱)을 처리하거나, 보안(인증, 권한) 등의 목적으로 특정 조건을 검사하고 해당 요청을 처리하거나 무시할 수 있다. Dispathcer Servlet이 핸들러 매핑을 통해 controller을 찾도록 요청하는데, 그 결과로 실행 체인(HandlerExecutionChain)을 돌려준다. 여기서 1개 이상의 interceptor가 등록되어 있다면 순차적으로 intercept들을 거쳐 controller가 실행되도록 하고, interceptor가 없다면 바로 controller를 실행한다..

[Spring Boot] 4. View Resolver

핸들러 메소드가 요청을 처리하고 논리 뷰 이름을 반환하면DispatcherServlet은 화면에서 데이터를 표시하도록 뷰 템플릿에 제어권을 넘긴다. 스프링 MVC에서는 뷰를 해석할 수 있는 ViewResolver 구현체 몇 가지가 있는데,그 중 MVC 기본 설정에는 InternalResourceViewResolver를 기본으로 사용하고 있다. InternalResourceViewResolver는 사용이 간단해서 편하지만, RequestDispatcher가 forward 할 수 있는 내부 리소스(jsp/서블릿)만 해석이 가능하기 때문에 다른 뷰 템플릿(Thymeleaf )을 사용하는 경우에는 다른 viewResolver를 사용해야 한다.  Thymeleaf와 같은 뷰 템플릿을 사용하는 경우에는 Thymel..

[Spring Boot] 3. Handler Method

매핑된 핸들러 메소드로 우리가 입력하는 데이터가 전달되게 하려면 어떻게 해야할까?핸들러 메서드의 다양한 파라미터 전달 방법에 대해 알아보자.WebRequest로 요청 파라미터 값 전달받기첫번째 방법으론 WebRequest로 파라미터 값을 전달받을 수 있다.HttpServletRequest/Response, ServletRequest/Response도 핸들러 메소드 매개변수로 사용 가능하지만,이 방식들은 Servlet에 종속이므로, Servlet에 종속적이지 않은 WebRequest가 Spring 기반의 프로젝트에서 더 자주 사용된다.WebRequest는 Spring Framework에서 제공한다! 코드를 통해 알아보자. index.html에서 GET 방식의 /first/regist 요청을 전달한다. ..