DEV/Backend

· DEV/Backend
도커 캐싱으로 인한 이전 버전 JAR 파일 지속 사용 문제 해결하기 오늘은 Docker Compose를 이용해 네트워크를 구성하고 이미지 간 통신을 설정하는 과정에서 발생한 흥미로운 문제에 대해 이야기하고자 합니다. 프로젝트 설정에서 prod로 지정했음에도 불구하고, Spring 프로젝트의 변경 사항이 제대로 반영되지 않는 상황이 발생했습니다. 문제의 핵심은 Flask 서버 컨테이너로 요청을 보내는 과정에서, 서버가 계속 localhost로 인식되는 것이었습니다. 이는 도커 이미지를 생성하는 과정에서 발생한 문제라 추측 되었습니다 사전 지식 도커 캐싱 메커니즘 Docker는 이미지를 '레이어’라는 여러 개의 층으로 구성합니다. 각 레이어는 Dockerfile의 한 명령어에 해당하며, 이들이 순차적으로 쌓..
· DEV/Backend
Intro. Restdocs를 떠나다 🐥 카카오 테크 캠퍼스 - 2단계 6주차 마지막 과제는 API 문서를 작성하는 것이다. Restdocs로 예시를 들어주셔서 일단 구현은 했는데, Swagger의 UI와 테스트를 할 수 있다는 점이 맘에 들었기 때문이다 그래서 둘 다 만들어 제출하기로 했다! 재밌잖아! Contents 1. 기본 구성 Swagger 의존성을 먼저 설정합니다 implementation 'io.springfox:springfox-boot-starter:3.0.0' 다음은 application.yml 설정합니다. application.yml에 아래 코드를 빼먹으면 bean을 받지 못해서 프로젝트가 터집니다… ChatGPT로 에러 해결 - Failed to start bean ‘document..
· DEV/Backend
Intro. 무슨 일이지…? 갑자기 Swagger 사용하는 방법 쓰면서 Swagger를 만들고 있었는데 에러가 발생했다 아직 별도의 세팅을 하지 않았는데 에러가 떠서 좀 당황 스러웠다 해결 방안 문제 파악 일단 로그를 봐보자. 프로젝트 부팅 과정에서 Warning이 떴다. 그리고, 내려가면 Null Exception이 뜬다 마지막 프로젝트 실행 이후 달라진 점은 새로운 의존성(Swagger)를 추가했다는거라 설정 파일에서, Swagger 부분을 긁어서 🚀 Chat GPT에게 한 번 물어본다 내가 예상한 문제가 정답이라고 알려준다 해결 방안 GPT에게 최신 정보가 없는거 같아, 구글링을 했다 구글링해보니 spring.mvc.pathmatch.matching-strategy=ant_path_matcher를 ..
· DEV/Backend
문제 상황 🐥 카카오 테크 캠퍼스 - 2단계 5주차 과제 수행 중에 global Exception Handler를 사용하는 과제가 있었다 code를 작성하면서, 직접 에러를 확인하고 싶어서, 아래와 같이 핸들러를 작성하고 실행했다 @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception500.class) public ResponseEntity serverError(Exception500 e){ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("잘 찾아왔다."); } } Controller 코드 : runtime Error를 예시로 삼았다 @..
· DEV/Backend
Hibernate - JPA 표준 구현하고, 확장한 ORM 프레임워크 Hibernate는 JPA(Java Persistence API)의 표준을 구현하고 확장한 ORM 프레임워크입니다. Hibernate는 개발자가 객체 지향적인 방식으로 데이터를 다룰 수 있도록 도와주며, 객체와 데이터베이스 간의 매핑을 관리합니다. 개발자는 자바 객체를 사용하여 데이터베이스의 테이블과 상호작용할 수 있으며, Hibernate가 자동으로 SQL 쿼리를 생성하고 실행하여 데이터베이스와의 상호작용을 처리합니다. Hibernate를 사용하면 개발자는 SQL 쿼리 작성 및 데이터베이스와의 상세한 연결 및 트랜잭션 관리에 대한 부담을 줄일 수 있으며, 객체 지향적인 개발에 집중할 수 있습니다. Hibernate Modeling 1..
· DEV/Backend
MyBatis - Java의 오픈 소스 ORM 프레임워크이다 MyBatis는 기존 JDBC 코드의 반복과 복잡성을 줄이고, 데이터베이스와 객체 간의 매핑을 보다 편리하게 처리할 수 있도록 도와줍니다. 즉 개발자는 복잡한 SQL 매핑과 성능 최적화를 자유롭게 제어할 수 있습니다. 예제 코드 같은 기능인데도 MyBatis가 간편한게 보인다 MyBatis User Object 맵핑을 바로 해준다 public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(int id); } JDBC 커서 만들고, Close 하고 세팅 할 것이 많다. public class UserDAO { private final D..
· DEV/Backend
Restful API - 클라이언트와 서버 간 통신 규칙과 규약 제공 - 강제성이 없고, 이미 컨벤션이 있다면 존중하라 REST는 웹 기반 애플리케이션에서 자원을 표현하고 상태를 전송하기 위한 아키텍처 스타일입니다. 이는 RESTful API의 규칙과 규약을 제공하며, 이를 통해 클라이언트와 서버 간의 통신이 이루어집니다. 자원은 고유한 URI(Uniform Resource Identifier)로 표현되고, HTTP 메서드를 사용하여 자원을 조작합니다. Restful API 예시 모든 사용자 조회: GET: /users 특정 사용자 조회: GET: /users/{id} 새로운 사용자 생성: POST: /users 특정 사용자 수정: PUT: /users/{id} 특정 사용자 삭제: DELETE: /use..
· DEV/Backend
Mock API 작성하는 팁 🐥 카카오테크캠퍼스 - 2단계 2주차 과제를 수행 할 때, 하나하나 데이터를 입력해야 하는 불편함이 있었는데 오늘 강사님이 보여주신 코드를 보니까 깔끔해서 들고 왔다 @GetMapping("/products") public ResponseEntity findAll(@RequestParam(defaultValue = "0") int page) { List responseDTO = new ArrayList(); // 상품 하나씩 집어넣기 responseDTO.add(new ProductRespFindAllDTO( 1, "기본에 슬라이딩 지퍼백 크리스마스/플라워에디션 에디션 외 주방용품 특가전", "", "/images/1.jpg", 1000 )); responseDTO.add(n..
· DEV/Backend
TypeORM의 Entity 참조는 어떻게 일어나는가? 🐥 카카오테크캠퍼스 - 2단계 1주차 기본 Entity 설계를 하는데, 평소에 TypeORM의 Entity 참조는 어떻게 일어나나 궁금해졌다. Entity 설계를 하니 FK 설정에 대해서 자연스럽게 고민하는데, 자동으로 Entity를 참조하고, 필요한 필드만 가져와 뿌리던 그 편리함은 어디서 왔지? 싶었다 Code 분석 위의 코드는 캡스톤 할 때 만든, User 테이블이다. 조금 손봐서, UserMeta 테이블을 Entity로 참조하도록 변경했다 TypeORM의 코드를 까보자 그렇다면, 예시로 0neToOne 어노테이션을 확인했다 export declare function OneToOne( typeFunctionOrTarget: string | ((..
· DEV/Backend
조회 Vs Join 무엇이 더 효율적인가 🐥 카카오테크캠퍼스 - 2단계 1주차 과제 분석을 하고 있는데, 자연스럽게 조회와 Join 중 무엇이 효율적인가 고민하게 되었습니다 사실 그냥 만드는거라면, 쓱쓱 만들면 되는데 그런게 아니라 대용량 처리나 잦은 조회 등의 문제도 생각해보고 싶었습니다 일단 조회(DB Lookup)와 조인 연산은 관계형 데이터베이스에서 수행하는 일반적인 작업입니다. 둘 다 데이터베이스로부터 정보를 검색하는 방법이지만, 특정 시나리오에 따라 성능에 다른 영향을 미칠 수 있습니다. 1. 데이터베이스 조회 (DB Lookup) DB Lookup은 특정 데이터를 찾기 위해 데이터베이스의 단일 테이블을 쿼리하는 것을 포함합니다. 예를 들어, Customers 테이블이 있고, ID로 고객의 세..
berom
'DEV/Backend' 카테고리의 글 목록