반응형 Develop232 [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. [Java] java.sql.SQLException: Parameter index out of range ❗ java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). 오류 💥 문제 상황 PreparedStatement를 이용해 쿼리문을 실행시키려고 함 // 파라미터에는 ?가 들어가야 한다. String sql1 = "update board set turn = {1} where id = {2}"; // 문자열이어도 '를 쓸 필요가 없다. - setString을 해주니까 String sql2 = "update board set turn = '?' where id = ?"; try (PreparedStatement preparedStatement = connection.prepareStatement(sql1.. 2022. 4. 4. [Java] 반환 타입은 스트림보다 컬렉션을 사용하자. 일련의 원소를 반환하는 메서드 반환 타입으로 Collection, Set, List, Iterable, Array 등 다양하게 사용 가능하다. Java8에서 Stream 등장으로 복잡한 일이 발생하기 시작했다. 반복(iteration)을 지원하지 않는 Stream ❗ stream만 반환하는 API 여기서 의미하는 for-each는 stream().forEach()가 아니다. for(String l : list) { ... } 를 의미합니다. ❓ Stream과 Iterable Stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함한다. 이들은 Iterable 인터페이스가 정의한 방식대로 동작한다. 그럼에도 for-each가 불가능한건 Stream이 Iterable을 확장(ex.. 2022. 4. 3. [Git] 커밋 변경 내역에서 특정 파일/키워드 삭제하기 😄 서론 준 덕분에 ✨넥스트스텝의 김민주님, 임성현님의 Git 발표✨를 듣게 되었다. 발표는 실습을 바탕으로 진행되었는데 너무 인상 깊었고 신기했고.. 무엇보다 나중에 쓸 일이 생길 것 같았다.😇 관련 내용을 포스팅해도 되는지 여쭤보고 허락 하에 포스팅 한다. 흔쾌히 허락해주신 민주님, 성현님과 말을 전달해주신 준 모두 감사합니다. 😊 😨 만약 내가 중요한 정보를 GitHub에 올렸다면... 관리자 계정의 ID, password를 하드코딩해놓고 그대로 GitHub에 올려버렸다면? 데이터베이스의 주소, 비밀번호 등이 다 드러난 설정 파일을 그대로 GitHub에 올려버렸다면??? 다신 이런 실수를 하지 않겠다는 다짐은 당연하고!! 이미 일어난 일을 어떻게 해결해야 할까? 1. https://rtyley.gi.. 2022. 3. 31. NFT가 붐인 이유? (feat. NFT란?) 서론 내 주변에는 게임을 좋아하는 사람이 많다. 그런 친구들과 대화하다 보면 자연스레 게임 이야기를 많이 한다. 그 중 NFT에 대한 이야기가 꽤 흥미로웠다. 이게 뭔지 왜 적용했는지 개발자로서의 호기심이 동해 글을 작성하게 되었다. NFT란? = Non-Fungible Token = 대체 불가 토큰 블록체인에 등록된 고유한 디지털 인증서 예술 작품이나 수집품 같은 자산의 소유권을 기록하는 데 사용 ❓ 대체 불가 토큰 Fungibility: 한 물체가 다른 물체로 대체 가능함 (ex: 돈) Non-Fungible: 동일한 경제적/정서적 가치로 대체될 수 없음 (ex: 엄마가 사준 지갑 != 길 가다 아무거나 산 지갑) ❓ 블록 체인 :데이터를 네트워크에 연결된 여러 컴퓨터에 저장하는 분산형 데이터 저장 .. 2022. 3. 25. [Java] 인터페이스를 사용하자! 자바는 다중 구현을 위해 인터페이스, 추상 클래스 기능을 제공한다. 그러면 어느 것을 사용하는게 더 좋을지 한번 고민해보자! 🤗 인터페이스의 장점 ❗ 자유로운 추가 자바는 단일 상속이 조건이다. 이러한 관점에서 추상 클래스 방식은 새로운 타입을 정의하는 데 커다란 제약이다. 예를 들어 개발 도구는 컴퓨터, 안드로이드 개발자에게는 삼성폰, IOS 개발자에게는 아이폰 등으로 나눌 수 있다. 그렇다면 'Computer ⊂ DevelopmentTool'로 표현할 수 있다. 이번에는 게임기를 생각해보자. 게임기에는 컴퓨터, 스위치, 닌텐도, 플스 등등 여러가지가 있다. 그렇다면 'Computer ⊂ GameMachine'로 볼 수도 있겠다. 그런데 위에서 말했다시피 자바는 단일 상속이 조건이라 아래와 같은 표현이.. 2022. 3. 18. 이전 1 ··· 7 8 9 10 11 12 13 ··· 26 다음 반응형