본문 바로가기

개발일지

(102)
[230702] Java 이미지 리사이징 방법 이유 인생퍼즐 프로젝트에서 이미지 리사이징 기능을 추가하기로 했다. 저장 공간을 절약하고 Front에서 이미지를 불러올 때 더 빨리 불러올 수 있도록 하기 위해서였다. 사전 조사 이미지 리사이징을 하기 위해서 방법을 찾아봤다. 우리는 원하는 기능이 있으며 빠르게 처리할 수 있는가를 기준을 세워서 말이다. 잘 작성된 글을 찾아서 쉽게 결정할 수 있었다. 이후 퍼포먼스의 문제가 없다면 결정이 바뀌지는 않을 것 같다. 📌 이미지 리사이징 라이브러리와 속도 측정 결과 Marvin – 361ms Imgscalr – 143ms Thumbnailator – 547ms java.awt.Graphics2D – 34ms Image.getScaledInstance() – 235ms 참고 사이트 : https://www.b..
[ 230702 ] 29주차 회고 일주일 간 진행한 내용 1. 자바 스프링 강의 듣기 2. API 작성 및 페어 간 피드백 3. 사이드 프로젝트 논의 4. 그냥... 일주일간 많이 생각해 본 것 자바 스프링 강의 듣기 [진행] 자바 스프링 입문 강의 2주 차를 들었다. 3 Layer Architecture, IoC/DI, Bean 등 자바 스프링에 핵심이 되는 것에 대한 내용이 담겨있었다. JPA에 관련해서 Entity, Persistence Context 내용을 다루었다. 다룬 내용으로 간단하게 API를 작성해 보는 실습을 했다. 이후 숙련주차 강의 1주 차를 들었다. Bean, 인증, 인가, 쿠키, 세션, JWT의 내용으로 이루져 있었다. 숙련주차부터는 페어가 생겨 강의를 들은 후 같이 이야기를 하면서 정리하는 시간을 가졌다. [생각..
[230701] 쿠키, 세션, JWT ? 인증 & 인가 ❓인증은 무엇인가요? 💬 사용자의 신원을 확인하는 과정으로 "너 여기 들어올 수 있는 사람이야?"라고 물어보는 거와 같다. ❓인가는 무엇인가? 💬 인증된 사용자에 대한 접근 권한을 결정하는 과정으로 "너 이거 사용할 수 있는 사람이야?"라고 물어보는 거와 같다. 쿠키 & 세션 ❓쿠키가 나온 이유는 무엇인가? 💬 클라이언트와 서버가 연결이 계속되어 있는 경우 자원의 소비가 너무 많다. 특히 서버 쪽에 부하가 많이 걸린다. 그래서 클라이언트와 서버는 비연결 방식을 사용한다. 비연결 방식을 사용하면 클라이언트와 서버가 서로의 상태를 알지 못하게 되는데, 이를 보완하고자 필요한 정보를 저장을 해뒀다고 주고받는 쿠키를 사용하는 것 같다. ❓쿠키는 무엇인가? 💬 쿠키는 클라이언트에 통신간에 필요한 정..
[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 요청에 따라 비즈니스 로직을 수..