프레임워크(Framework)/Spring (13) 썸네일형 리스트형 그래서 예외 처리를 어디서 해야 할까? 예외 처리를 어디서 하는 지에 대한 결정은 요구 사항에 따라 다르다고 생각한다. 1. Service 계층에서 예외 처리2. Controller 계층에서 예외 처리3. 전역(Global) 예외 처리 이전에 배운 것에 따르면 Service 계층에서는 비즈니스 로직을 포함하며, 데이터 연산을 수행한다.만약 비즈니스 로직에 가까운 예외는 Service 계층에서 처리하는 것이 적절하다. @Servicepublic class UserService { public User getUserById(int id) { Optional user = userRepository.findById(id); return user.orElseThrow(() -> new UserNotFoundExcepti.. 테이블 간 연관관계에서 M:N을 쓰면 안 되는 이유? 테이블 간 연관관계의 3종류의 예시를 간단하게 들어보면,1:1 한 학생은 고유한 학번을 가진다.1:N 하나의 학과에는 여러 학생이 소속될 수 있다. 한 명의 학생은 하나의 학과(주전공)에 소속된다.N:M 한 학생은 여러 개의 과목을 수강할 수 있고, 하나의 과목은 여러 명의 학생들에 의해 수강된다. 그러면 M:N을 쓰면 안 되는 이유는 무엇일까? 1. 하나의 컬럼에 리스트로 넣을 수 없고 학생 수만큼 컬럼 수를 늘릴 수도 없음 => 속성의 원자성 위반 PK과목명FK_학생 0011알고리즘001, 002, 0030022자료구조 0033운영체제 PK학생명FK_수강과목001우채윤 002오수연 003윤재욱 2. 삭제 수정 시(Delete, Update) 서로가 서로를 참조하고 있기에 두 테이.. DTO는 왜? 언제 사용할까? DTO란 Data Transfer Object의 약어로, 데이터 전송 객체를 의미한다. 즉, 계층 간 데이터 전송을 위해 사용되는 객체이며 Entity의 사본이라고 할 수 있다.Entity는 DB에서 나온 데이터의 원본이자 곧 DB로 들어갈, 연산이 끝난 후 원본이 될 객체를 의미한다. 하지만 우리는 그동안 DTO를 사용하지 않고도 충분히 API를 만들 수 있었다. 그런데 왜 개발자들은 하나의 객체, 데이터가 Repository까지 들어가면 무슨 단점이 있기에 DTO를 사용하는 걸까? 1. 필요 없는 데이터에 불필요한 접근 발생DTO를 사용하지 않고 객체를 그대로 전달하면, 필요하지 않은 컬럼에도 접근하게 된다. 이는 보안 문제를 발생시킬 수 있고, 성능 저하로 이어질 수 있다. 2. 불필요한 데.. Setter 왜 쓰는지 알고 사용하자! 그동안 나는 너무 자연스럽게 private인 필드에 접근하기 위해 public으로 만들어진 getter & setter를 너무 자연스럽게 generate해서 사용했다. 실제로 사용이 되지 않는 경우에도 습관처럼 초기에 만들어 놓곤 했다. 특히 Lombok을 알게 된 이후로는 @Getter, @Setter를 왜 필요한지 고민의 과정을 거치지 않고 사용했다. 그렇다면 Setter를 왜 조심해서 써야 하는지 그 이유에 대해 살펴보고자 한다. 1. 값을 변경한 의도를 파악하기 어렵다. package com.example.summer.accommodation;public class Accommodation { private String name; private int minPrice; pri.. @Comonent? @ComponentScan? @Autowired? 어제 배운 IoC, DI와 오늘 배운 @Component, @ComponentScan, @Autowired를 연관지어 정리해보자. 스프링 빈 즉, 스프링이 컨테이너에 담아두는 객체로 등록하는 방법은 크게 두 가지가 있다. 1. @Component2. @Configuration + @Bean=> 사실상 Configuration 자체에 Component가 포함되어 있기에 1 방법이 메인이다. 그럼 @ComponentScan은 무엇일까?말 그대로 컴포넌트를 스캔한다.즉, 스프링은 프로젝트를 스캔하며 '컴포넌트 어디에 적어놨니?'라고 물으며 자신의 컨테이너에 객체를 담는다. 사실 알다시피 컴포넌트 스캔은 원래 xml에서 하던 일이다.하지만 spring은 이 과정을 알아서 해준다. 역시 똑똑이...ㅎㅎ 마지막으.. 스프링 Core? 인간에게도 코어 근육이 중요한 것처럼 스프링에서의 코어도 매우 중요하다.그렇다면 스프링 코어는 어떤 것들이 있을까? IoC (Inversion of Control) 제어의 역전?짧게 한 줄로 요약하자면 개발자가 아닌 스프링 컨테이너에게 설정을 통해 제어권을 넘기는 것이다.나는 역전을 역할의 전환으로 표현하고 싶다.즉, 원래 개발자가 가진 통제권을 180도 상황이 바뀌어 스프링이 가지게 되어 객체(스프링 빈)를 제어한다. 컨테이너 IoC/DI/스프링 컨테이너는 무엇일까?컨테이너 박스를 생각하자그럼 무엇이 담겨 있을까? 그동안 객체를 만 번은 얘기한 것 같다. 참고로 컨테이너도 객체이다. 객체에 객체들이 모여있다. 스프링 빈 스프링 빈은 객체이다.즉, 위에서 언급한 컨테이너는 스프링 빈을 담는다. .. SOLID? ✅ SOLID 분리를 잘한다 ⇒ 객체 지향적 예시 코드를 만들어보자.SRP (Single Responsibility Principle) 단일책임 원칙한 클래스는 하나의 책임만 가져야 한다.이 클래스를 수정해야 하는 이유는 하나의 직군(역할) 때문이어야 한다.수정을 가하는 대상이 하나의 역할을 해야한다.A ⇒ B ⇒ C 연쇄적으로 수정하는 일이 없도록..액터: 클래스에 수정을 가하는 역할자class XSrp { class Employee { String name; String positon; Employee(String name, String position) { this.name = name; this.positon = p.. [주문을 JAVA]KPT 회고 ⭐KPT 회고 본격적으로 개발을 시작하자마자 발생했던 이슈가 있었다..!! git clone 후 프로젝트 주요 폴더들(src, .idea등)이 보이지 않음 나만 그런게 아니라 팀원 전체가 겪었던 문제였다.해결은? iml 파일을 우클릭 후 import module을 클릭하니 보이지 않던 src, .idea 파일들이 튀어나옴 알고보니 iml(Intellj IDEA Module)은 모듈 구성에 대한 xml 형식으로 IDE가 자체적으로 제공하고 intellij가 빌드할 때 읽는 파일이라고 한다.실제로 iml을 지우면 갑자기 .idea와 src 파일들이 날아간다... 그렇다면 나머지 이슈들에 대해서는 아래 Problem에 작성하려고 한다. ✔️ KEEP 1. 서로의 개발과정에서 사고의 방향이 같도록 UM.. 이전 1 2 다음