반응형 Develop237 [Spring 5 프로그래밍 입문] chapter 2 - 스프링 시작하기 목차 chapter 2: 스프링 시작하기 빌드와 의존 전이 Spring bean 등록하기 Spring은 객체 컨테이너다? 싱글톤 객체 Chapter 2 - 스프링 시작하기 📚 빌드와 의존 전이 빌드 도구에는 크게 Ant, Maven, Gradle이 있다. 요즘에는 Maven과 Gradle을 많이 사용하는 편이다. 📕 Maven 설정 정보 관리 파일: pom.xml 코드 컴파일/실행 시 로 설정한 아티팩트 파일 사용 로컬 레포지토리에 .jar 파일이 존재하면 해당 파일 사용 로컬 레포지토리에 존재하지 않으면 메이븐 원격 중앙 레포지토리에서 다운받음 의존 전이; Transitive Dependencies 를 통해 아티팩트 파일을 다운 받을 때, 해당 아티팩트가 의존하는 아티팩트까지 다운로드 한다. 의존하는 .. 2022. 5. 21. [Java] Duplicate key XXX 에러 java.lang.IllegalStateException: Duplicate key 'key로 저장하려는 값' (attempted merging values ~~) ❓ 에러 원인 Collectors.toMap() 호출 시 중복되는 key 값이 존재 💡 해결 방법 해결 방법은 크게 2가지가 있다. key가 중복되지 않는 데이터 사용 toMap(Function, Function) 대신 toMap(Function, Function, BinaryOperatior) 사용 👀 더 자세히 살펴보기 위와 같은 에러가 발생하는 예제 코드를 만들어봤다. name을 key로, User 객체 자체를 value로 넣으려고 한다. 헌데 name이 동일한 데이터가 2개 존재한다. key만 동일한 데이터가 존재하는 경우 @Test .. 2022. 5. 18. [Java] 파라미터를 Optional로 받지 말자 'Optional' used as type for parameter '파라미터명' 경고 어쩌다보니 Optional 파라미터를 받는 메서드를 만들게 되었다. 노란줄이 쳐지며 경고가 떴다. 대체 왜? 🤔 private void test(Optional id) { // ... } 😭 1. 메서드에 조건부 로직을 유도한다. Optional 값을 바로 get()해서 사용하는 경우 노란 줄로 경고가 뜬다. null인지 체크하지 않고 바로 사용해서 뜨는 경고다. 'Optional.get()' without 'isPresent()' check 따라서 메서드 내부에 해당 Optional에 null값이 확인하는 로직인 'isPresent()'를 반드시 호출해야한다. isPresent가 true인 경우와 false인 경우를.. 2022. 5. 12. [Spring] Spring의 트랜잭션 관리 (feat: @Transactional) 📑 목차 트랜잭션이란? 트랜잭션 예제 트랜잭션 ACID 트랜잭션 관리의 종류 비즈니스 로직과 트랜잭션 코드의 분리 선언적 트랜잭션 관리 vs 프로그래밍적 트랜잭션 관리 @Transactional이란? AOP @Transactional 예제 @Transactional의 동작 원리 테스트와 @Transactional 😮 트랜잭션이란? : DB 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들 📚 트랜잭션 예제 온라인 쇼핑몰에서 결제할 때를 생각해보자. 연로그는 친구의 생일을 앞두고 생일 선물을 사려고 한다. 선물을 골라 결제할 때 총 2가지 작업이 이루어진다. 판매처에 돈 보내기 판매처에서 돈 받기 1만 성공하거나 2만 성공하는 경우가 발생해서.. 2022. 5. 8. [Spring] @RequestBody가 빈 생성자가 필요한 이유 (hint. ObjectMapper) com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `클래스명` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) 에러 Spring에서 @RequestBody를 통해 데이터를 가져오는 중에 위와 같은 에러를 만났다. 구글링을 해보니 하나같이 빈 생성자를 생성하라고 하는데 대체 왜? 라는 생각이 들었다. Spring은 Http Message Body를 읽기 위해 HttpMessageConverter를 사용한다. 클라이언트로.. 2022. 5. 1. [Spring] 생성자 주입 vs 필드 주입 vs 수정자 주입 의존성 주입; Dependency Injection Spring에서 의존성을 주입하는 방법은 3가지가 있다. 생성자 주입; Constructor Injection 필드 주입; Field Injection 수정자 주입; Setter Injection 결론부터 말하자면 '생성자 주입'이 가장 좋다. 각 주입이 어느 차이점이 있는지 살펴보자. 생성자 주입; Constructor Injection final 키워드 선언 가능 테스트 코드 작성 용이 @Controller public class HomeController { private final GameService gameService; // Spring 4.3 이전 버전이라면 @Autowired 필요 public HomeController(GameServi.. 2022. 4. 28. [Spring] @ExceptionHandler로 API 예외 한번에 처리하기 목차 1. 서론 2. @ExceptionHandler 3. 상태 코드 바꾸기 4. Exception 한꺼번에 처리하기 5. 모든 Controller에 적용시키기 🙋♀️ 서론 API를 호출하다 보면 예외가 많이 발생된다. controller에서 처리하려고 로직을 짜다보면 수많은 중복 코드가 발생한다. Spring에서는 이를 편리하게 처리하기 위해 @ExceptionHandler라는 어노테이션을 지원해준다. 이번 글에서는 에러 처리 방법에 대해 공부해보겠다. 🚀 @ExceptionHandler Controller에서 @ExceptionHandler가 붙은 메서드를 이용하면 특정 예외를 처리할 수 있다. Controller 내부에서 어떠한 API가 호출되다가 IllegalArgumentException이 발.. 2022. 4. 21. [JDBC] JDBC가 등장한 이유 목차 1. JDBC 등장 배경 2. JDBC란 3. 표준화의 한계 4. JDBC와 최신 기술 👨💻 JDBC 등장 배경 애플리케이션을 개발할 때 중요한 데이터는 대부분 DB에 저장된다. 클라이언트가 DB를 호출하려면 아래와 같은 과정을 거친다. 여기서 Application Server에서 DB까지의 과정을 좀 더 살펴보자. 커넥션 연결: 주로 TCP/IP 사용 SQL 전달: 커넥션을 통해 DB에 SQL 전달 결과 응답: DB가 SQL 수행 후 결과 응답. application server는 응답 결과 활용 과거에는 DB마다 커넥션을 연결하는 방법, SQL 전달하는 방법, 결과를 응답 받는 방법이 모두 달랐다. 게다가 MySQL, Oracle DB, h2 등등등 DB의 종류는 정말 정말 많다. DB 종류에.. 2022. 4. 15. [Java] 사라진 SQLException 😏 서론 이번에 과제를 진행하면서 PreparedStatement를 이용해 DB 데이터를 가져왔다. 코드를 작성하다보니 자연스럽게 try - catch를 통해 SQLException를 처리하는 코드가 필수적으로 추가되었다. 여기서 한가지 의문점이 들었던 건, 예전에 만들었던 프로젝트들에서도 DB와 연동하는 프로젝트들은 정말 많았으나, SQLException을 따로 처리한 기억이 없었다. 어떤 차이가 있는가... SQLException은 어디서 처리됐는지, 왜 사라졌는지에 대한 이야기를 다뤄보려고 한다. 🤩 SQLException이란? 데이터베이스 접근 또는 다른 에러에 대한 정보를 제공하는 예외 Checked Exception 🔻 Checked Exception vs Unchecked Exception .. 2022. 4. 7. 이전 1 ··· 7 8 9 10 11 12 13 ··· 27 다음 반응형