백엔드/스프링 25

SpringBoot JPA - @ManyToOne 사용하기

@ManyToOne 어노테이션을 통해 다른 테이블에서 FK를 참조하여 사용할 수 있다. @ManyToOne은 단방향 다대일[N:1] 연관관계 매핑을 나타낸다. 테이블은 FK(외래 =키)를 통해서 두 테이블이 연관관계를 맺게 되는데, 객체 양방향 관계(테이블 둘 다 참조하는 경우) 외래 키를 관리하는 곳을 지정해야 한다. 다대일 (@ManyToOne)의 경우 외래키를 관리하는 곳이 N이므로, 연관관계의 주인이 된다. 내가 관리하는 Post 테이블에서는 user의 PK인 Id 값과, category의 키 값인 id 값이 필요하다. 이때 @ManyToOne(fetch = LAZY)를 각각 FK에 추가하고, @JoinColumn(name)을 이용해 연관관계 매핑이 가능하다. 그러면 어떻게 User와 Catego..

백엔드/스프링 2022.01.27

타임리프 / SpringEL 변수 표현식, 기본 객체들 - 스프링 MVC 2편

타임리프에서 변수를 사용할 때는 변수 표현식을 사용한다. 변수 표현식 : ${...} SpringEL 다양한 표현식 사용 Object user.username : user의 username을 프로퍼티 접근 -> user.getUsername() user['username'] : 위와 같음 -> user.getUsername() user.getUsername() : -> user의 getUsername() 을 직접 호출 List users[0].username : -> List에서 첫 번째 회원을 찾고 username 프로퍼티 접근 list.get(0).getUsername() users[0]['username'] : 위와 같음 Map userMap['userA'].username : Map에서 userA..

백엔드/스프링 2022.01.25

타임리프 - 텍스트 쓰는 방법 / Escape - 스프링 MVC 2편

타임리프는 기본적으로 HTML 테그의 속성에 기능을 정의해서 동작한다. HTML의 콘텐츠(content)에 데이터를 출력할 때는 th:text 를 사용하면 된다. HTML 콘텐츠 영역안에서 직접 데이터를 출력하고 싶으면 [[...]] 를 사용하면 된다. Escape HTML 문서는 같은 특수 문자를 기반으로 정의된다. 뷰 템플릿으로 HTML 화면을 생성할 때는 출력하는 데이터에 특수 문자가 있는 것을 주의해 사용해야 한다. 우리가 Spring 이런식의 출력을 원한다면 소스는 Spring! 의 출력으로 바뀐다. Unescape unescape를 하기 위해서 타임리프의 th:text -> th:utext [[...]] -> [(...)] 로 변경하면 된다. HTML 엔티티 웹 브라우저..

백엔드/스프링 2022.01.25

thymeleaf의 특징 - 스프링 MVC 2편

[thymeleaf의 특징 3가지] 서버 사이드 HTML 렌더링 (SSR) 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용된다. 네츄럴 템플릿 타임리프는 순수 HTML을 최대한 유지하는 특징이 있다. 타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹 브라우저에서 파일을 직접 열어도 내용을 확인할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. 스프링 통합 지원 타임리프는 스프링과 자연스럽게 통합되고, 스프링의 다양한 기능을 편리하게 사용할 수 있게 지원한다.

백엔드/스프링 2022.01.25

싱글톤 방식의 주의점

싱글톤 패턴, 스프링 같은 싱글톤 컨테이너를 사용할 때, 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. 무상태(stateful)로 설계해야 된다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야 한다. 자바에서 공유되지 않는, 지역변수, 파라미터, ThreadLocal 등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정 금지해야 한다.

백엔드/스프링 2022.01.24