본문 바로가기

개발일지/TIL

(89)
[230630] @Bean과 @Component 차이? @ Bean과 @Component ❓@Bean과 @Component의 차이는 무엇일까? 💬 @Bean과 @Component는 IOC Container에 Bean을 등록해 주는 것은 동일하다. 그렇다면 어떤 차이가 있는 것일까? 직접 몇 가지 테스트를 해보니 내린 결론은 이렇다. @Bean의 경우 메서드를 통해 Bean 등록을 한다. @Component의 경우 생성자를 통해서 Bean등록을 한다. 그래서 외부 라이브러리에서 구현해 놓은 클래스를 Bean 등록을 하려면 생성자로 불가능하기 때문에 @Bean을 쓰는 것이 아닌가 싶다. ❓그렇다면 내가 구현 클래스를 만든다면 Component를 사용해 Bean 등록을 할 수 있지 않을까? 💬 이것이 궁금해서 실제로 코드를 작성해서 해봤다. 인터페이스를 확장하고 ..
[230629] NullPointerException를 Status Code 400으로 내보내기 Java Spring 예외에 대한 응답 Status Code 지금까지 예외가 나면 Throw를 날려 클라이언트에서 Status 2xx이 날아오지 않는 것만 확인했었다. 이번 시험에서 유저를 찾지 못했을 경우 NullPointException 처리와 함께 Status 400을 클라이언트에 응답으로 내려줘야 했다. NullPointException을 던지고 테스트를 해봤다. 그랬더니 Status 500으로 응답이 떨어지는 것을 확인할 수 있었다. public UserResponseDto findUser(Long id) { User user = userRepository.findById(id).orElseThrow( () -> new NullPointerException("회원 상세 조회 실패")); retu..
[230628] 네트워크와 Java Spring 적용한 미니 프로젝트 환경 1. Java 17 2. Mysql 8.0.32 3. JPA 프로젝트 폴더 구성 - domain - post - controller - service - dto - repository - entitiy - global - exception - handler API 명세 기능 method url request response 게시글 작성 POST /post { “title”: “title”, “writer”:writer”, “password”: “password”, “content”:”content”} {”title” :”title”, “writer”: “writer”, “content”:”content”, ”creatdAt”, “createdAt”} 게시글 전체 조회 GET /post [ {”tit..
[230627] 네트워크와 Java Spring 기본 개념 이해하기 (5) JPA ❓ JPA는 뭔가요? 💬 JPA(Java Persistence API)는 Java에서 사용하는 ORM 기술에 대한 표준 명세이다. ❓ ORM은 뭐죠? 장점은? 💬 ORM(Object-Relational Mapping)은 객체와 DB의 관계를 연결시켜 주는 친구다. 기존에 SQL을 수행하거나 가져온 DB의 데이터를 객체에 연결시켜 주기 위해서는 많은 작업들이 필요했다. 이러한 것들을 중간에서 처리해 줌으로 개발을 더 간편하게 할 수 있도록 했다. ❓ JPA의 가장 큰 장점? 💬 내가 생각하기에는 JPA의 가장 큰 장점은 DB에 대한 작업을 객체 단위로 다룰 수 있다는 것이다. 자바는 객체지향 언어이기 때문에 JPA 도입으로 DB작업에도 일관성이 부여된 것 같다. ❓ JPA사용할 때 쓰는..
[230626] 네트워크와 Java Spring 기본 개념 이해하기 (4) 3 Layer Architecture ❓ 3 Layer Architecture을 사용하는 이유 💬 MVC의 Controller에 모든 로직을 담겨있다면 코드가 몇 줄 되지 않은 경우에는 문제가 되지 않을 것이다. 기능 수정, 확장 등을 통해 코드가 늘어날수록 문제가 발생한다. 가독성이 떨어지며 유지보수가 힘들어진다. 리팩토링을 하거나 버그를 고칠 경우 경우 해당 기능과 관련된 메서드나 변수를 찾는 데 많은 시간이 들어갈 것이다. ✅ 가독성 및 유지보수를 위해 Controller, Service, Repository로 역할 분리 ➡ Controller : 클라이언트에 요청을 받아 적합한 비즈니스 로직을 가진 Service에 전달한다. ➡ Service : Controller 요청에 따라 비즈니스 로직을 수..
[230625] 네트워크와 Java Spring 기본 개념 이해하기 (3) JDBC ❓JDBC는 뭐지? 💬 JDBC는 애플리케이션과 DB 사이에서 연결 및 종료, 쿼리 전송 등을 제공하는 API다. ❓JDBC는 어떻게 동작하죠? 💬 JDBC 인터페이스를 통해 요청을 하면 DriverManager에 의해 연결된 DB로 쿼리가 보내지고 그에 따른 응답을 받을 수 있다. 그리고 DriverManager와 DB 사이에는 애플리케이션의 요청을 DBMS가 이해할 수 있게 바꿔주는 JDBC Driver가 있다. ❓JDBC Driver가 왜 필요하죠? 💬 SQL 표준이 있지만, 각 제품(MySQL, MongoDB, Oracle 등) 마다 기능이나 처리하는 방식이 조금씩 다르다. 그래서 자바 어플리케이션의 요청을 각 DBMS가 이해할 수 있게 변경해 주는 중간 다리가 필요하다. Introdu..
[230624] 네트워크와 Java Spring 기본 개념 이해하기 (2) Controller Annotation 1. PathVariable 👉 클라이언트가 URL 경로에 포함시켜 보낸 데이터를 받아올 수 있는 Annotation 👀 Client - Server 예시 [GET] http://localhost:8080/hello/request/star/Robbie/age/95 @GetMapping("/star/{name}/age/{age}") @ResponseBody public String helloRequestPath(@PathVariable String name, @PathVariable int age) 2. RequestParam 👉 클라이언트가 Query로 보낸 데이터를 받아올 수 있는 Annotation 👀 Client - Server 예시 [GET] http://..
[230623] 네트워크와 Java Spring 기본 개념 이해하기 (1) HTTP 네트워크의 핵심은 "요청"하고 "응답" 받기이다. 자유롭게 요청을 보낸다면 응답을 해주는 쪽에서 요청에 대한 정확한 응답을 내려주기 힘들 것이다. 컴퓨터는 정확히 알려주지 않으면 모르기 때문이다. 제대로 된 응답을 받기 위해 제대로 된 요청을 보내야 했다. 이를 위해 만들어진 규약이 HTTP이다. Web Server HTTP 요청에 대해 정적인 데이터와 동적인 데이터를 응답받을 수 있다. 정적인 데이터의 경우 Web Server에서 처리를 하며 동적인 데이터의 경우 WAS(Web Application Server)에서 처리를 해준다. WAS도 정적인 페이지를 처리를 해줄 수 있지만 정적, 동적 페이지를 분리를 해서 각 서버에서 응답을 해주는 것이 효율이 좋다. 정적인 데이터를 응답해 주는 데에 ..