[JPA] 다양한 연관관계 매핑
·
DB Access/JPA
다양한 연관관계 매핑#JPA/기본/연관관계 매핑시 고려사항 3 가지/다중성 (N:M)/단방향, 양방향: 테이블과 객체의 차이 고려!/연관관계의 주인은 어디에?/다대일 [N:1]/다대일 단방향/다대일 양방향연관관계 주인: FK 기준/일대다 [1:N]/일대다 단방향: 객체에서 연관관계 주인은 1쪽이지만, DB에서 FK는 다쪽에 있다.객체와 테이블의 차이 때문에 반대편 테이블의 외래 키를 관리하는 특이한 구조FK 위치와 연관관계 주인 위치가 달라서 @JoinColumn을 꼭 사용해야 함. 안쓰면 조인 테이블 생김FK 위치와 연관관계 주인 위치가 달라서 일쪽에서 저장 시 FK 매핑을 위한 쿼리가 추가적으로 나감 권장 X다쪽에..
[JPA] 연관관계 매핑 기초
·
DB Access/JPA
연관관계 매핑 기초#JPA/기본/연관관계가 필요한 이유객체지향 설계의 목표는 자율적인 객체들의 협력 공동체 를 만드는 것이다/객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다./단방향 연관관계/객체 지향 모델링@Entitypublic class Member {@Id @GeneratedValueprivate Long id;@Column(name = "USERNAME")private String name;private int age;// @Column(name = "TEAM_ID")// private Long teamId;@ManyToOne@JoinColumn(name = "TEAM_ID")private Team team;...(연관관계 저장)//팀 저장Team team = ne..
[Spring] @MockitoBean 등장(Spring 6.2), Deprecated되는 @MockBean(Spring Boot 3.4.0)
·
Spring
@MockBean은 스프링부트 3.4.0부터 Deprecated(코드가 어두워 보이지 않는다면, 우측 하단의 다크모드 버튼을 통해 다크모드를 해제하시면 됩니다!)기존 테스트 코드들은, 테스트 코드가 스프링 컨테이너의 의존도가 높았다.이를 개선하고자 Spring Framework 6.2부터 Bean-Override 기능을 테스트 코드에서 활성화한다고 한다.(물론, Bean-Override 기능은, 프로덕션 코드에서는 지양해야 하고, 어차피 프로덕션에서는 Deprecated 될 기능이다. 즉, Bean-Override 기능이 프로덕션 컨텍스트에서는 없어지고 테스트 컨텍스트에서만 유지되도록 모델이 변경되는 것이다) 기본적이 원리는 Bean-Override를 통해, Bean을 테스트용 Bean으로 교체하는 것이..
[Java] 출력 스트림과 입력 스트림 불일치
·
Software Development/TroubleShooting
채팅 서버와 클라이언트를 구현하던 중에, 서버가 보낸 메시지를 클라이언트가 수신하지 못하는 문제가 발생했다. OutputStream에 메시지를 전달하는 Session 객체package main.server.session;import static main.server.config.ServerConstant.CHANGE_USERNAME;import static main.server.config.ServerConstant.CLOSE_CONNECTION;import static main.server.config.ServerConstant.FIND_ALL_USER;import static main.server.config.ServerConstant.INVALID_COMMAND_FORMAT_MESSAGE;impor..
[Spring Transaction] 트랜잭션 이해와 적용
·
Spring/Transaction
트랜잭션 이해와 적용트랜잭션 - 개념 이해파일이 아닌 데이터베이스에 데이터를 저장하는 이유 트랜잭션하나의 거래를 안전하게 처리하도록 보장커밋(Commit): 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것롤백(Rollback): 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것트랜잭션 ACID트랜잭션은 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)을 보장해야 함원자성: 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하거나 모두 실패해야 한다.일관성: 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 예를 들어 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.격리성: 동시에 실행..
[Spring] Spring에서 Bean Validation이 동작하는 내부 원리
·
Spring
Spring에서 Bean Validation이 동작하는 내부 원리#Spring/MVC엔티티 클래스에 Bean Validation 애노테이션 사용엔티티 클래스의 필드에 @NotNull, @Size, @Min, @Max 등과 같은 애노테이션을 붙이면, 해당 필드에 대한 제약 조건이 정의된다.public class User { @NotNull(message = "이메일은 필수입니다.") @Email(message = "올바른 이메일 형식이 아닙니다.") private String email; @Size(min = 2, max = 20, message = "이름은 2자 이상 20자 이하여야 합니다.") private String name; // Getter, Setter ..
[Spring MVC] 스프링 MVC Redirect 처리 방법
·
Spring/MVC
스프링 MVC Redirect 처리 방법#Spring/MVC/Redirect/Redirect 처리 방법/1. HttpServletResponse의 sendRedirect()/2. ResponseEntity/3. RedirectView 직접 반환/4. “redirect:” 접두사/RedirectAttributes/1. Flash Attribute/2. Query Parameter 전달RedirectRedirect 는 클라이언트의 요청을 완전히 새로운 URL로 전달하여 처리하는 방식이다.웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.Redirect 처리 방법1. HttpServletResponse의 sendRedirect()@PostMapping("..
[Spring MVC] 스프링 MVC 기본 기능 정리
·
Spring/MVC
스프링 MVC 기본 기능 정리#Abstract/SpringMVC스프링 MVC 구조와 동작원리, 스프링 MVC가 제공하는 기능의 기본적인 사용법을 정리했습니다./스프링 MVC 구조/ArgumentResolver와 HTTP 메시지 컨버터/ArgumentResolver/HTTP 메시지 컨버터/스프링 MVC 확장/컨트롤러 등록/컨트롤러 등록 - Controller 인터페이스 구현(거의 안씀)/컨트롤러 등록 - HttpRequestHandler 인터페이스 구현(거의 안씀)/컨트롤러 등록 - @Controller, @RestController + @RequestMapping, @XXXMapping/HTTP 조회 방식/HTTP 요청 파라미터 조회/HTTP 요청 파라미터 조회 - 스프링 MVC/1. HttpServle..
[자료구조] 자바 Collection 총 정리(자료구조, Iterator, Iterable, Comparator, Comparable)
·
Java/Collection
컬렉션#Abstract/Java/Collection 인터페이스/List 자료 구조/ArrayList - 배열 리스트/연결리스트 - LinkedList/자바 List 인터페이스/자바 ArrayList/자바 LinkedList/Set/해시 알고리즘/자바의 hashCode()/자바 Set 인터페이스/Map 인터페이스/Stack - 사용 금지/Queue 인터페이스/Deque 인터페이스/Deque와 Stack, Queue/순회/Iterable, Iterator/자바가 제공하는 Iterable, Iterator/정렬 - Comparable, Comparator/컬렉션 유틸/Collection 인터페이스 정리Collection 인터페이스Collection 인터페이스는 java.util 패키지의 컬렉션 프레임워크의 핵..
[PS/BOJ] 1541번. 잃어버린 괄호 - C++[cpp]
·
PS/BOJ
문제 이 문제는 문자열 처리와 식의 값을 최소로 만드는 방법을 요구하고 있다.아이디어나올 수 있는 경우의 수를 생각해보자.1 + 2 + 3 + 4 -> 그대로 더한다.1 - 2 - 3 - 4 -> 그대로 뺀다.1 - 2 + 3 - 4-> (2 + 3)을 묶어버린다 1 - (2 + 3) - 4 = 1 - 2 - 3 - 4즉, - 가 한 번 나온 뒤로, 그 뒤에 오는 모든 수는 다 빼주면 된다.코드(중요!)아이디어는 대부분 다 떠올렸겠지만, 문자열 처리를 어떻게 할 지 고민인 분들이 많을 것이다.이 부분이 이 글을 쓰는 이유이기도 한데,구글링해서 나오는 코드 대부분은 아래와 같이 문자를 하나씩 입력받아 숫자, 연산자를 구분하고 있다.#include #include using namespace std; int..