🐛이슈- 발생한 오류 copy & paste- 오류가 발생한 상황 간략히 설명각자 API를 구현하던 중 팀원분이 [응답 통일 및 에러 핸들러]를 구현해서 PR을 올려주셨다. API 역할 분배할 때 되도록이면 엔티티별로 나눠놔서 내가 맡은 Transmission 부분을 끝내고 다음날 아침에 pull을 받았다. 충돌 좀 해결하고 Swagger로 테스트하려고 했는데, Swagger에 접속하면 Failed to load API definition.라는 문구와 함께 아래 화면이 뜨는 오류가 발생했다. 설명을 보면 API 정의해 둔 걸 로드하는 데 실패했다는 뜻이고, 응답 상태가 500이면 Server Error인 거라 localhost:8080/v3/api-docs 경로로 접속해 봤지만 에러에 대한 자세한 설명..
Spring
JPA에 대한 개념 설명(이전 강의)을 듣지 않고 이번 강의를 먼저 들으면서 JPA 활용부터 공부하고 있다. 따라서 이해가 되지 않는 부분이 엄청 많기 때문에 설명이나 코드는 이해한 부분만 적고 넘어가려고 한다. 나중에 JPA 개념 강의를 듣고 다시 복습하면서 설명을 채워 넣을 예정이다. 1. 도메인 모델과 테이블 설계요구사항 분석간단한 쇼핑몰을 만들어 볼 예정이다. 핵심 기능은 아래와 같다.회원 기능회원 등록 (POST)회원 목록 조회 (GET)상품 기능상품 등록 (POST)상품 수정 (PATCH || PUT)상품 목록 조회 (GET)주문 기능상품 주문 (POST)주문 내역 조회 (GET)주문 취소 (DELETE)기타 요구사항상품은 재고 관리가 필요하다.상품의 종류는 도서, 음반, 영화가 있다.상품을 ..
1. 프로젝트 생성이 링크에서 스프링 프로젝트를 편리하게 생성할 수 있다. 아래처럼 설정한 뒤 생성한다.Project: Gradle - GroovyLanguage: JavaSpring Boot: 3.x.xPackaging: JarJava: 17 || 21Dependencies: Spring Web, Thymeleaf, Spring Data JPA, H2 Database, Lombok, Validation build.gradle에서 dependencies를 아래와 같이 작성하자.JUnit4 추가 코드를 입력하지 않으면 JUnit5로 동작한다.dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' i..
한양대학교 ERICA캠퍼스 소프트웨어융합대학과 교내 IT 동아리 연합이 주최한 해커톤 HY-THON에 참여했다. 왜 우리 학교에는 아이디어톤만 있고 해커톤은 없을까 생각하고 있었는데 마침 주최한다길래 바로 신청서를 제출했다. [HY-THON 소개]HY-THON은 멋쟁이사자처럼, UMC, 구름톤 유니브, HY-END가 가진 "지속 가능한 교내 해커톤 행사"라는 공통된 목표로부터 만들어지게 되었습니다. 또, 개발자의 수요가 늘어나면서 개발에 대한 관심이 높아졌지만 교내에는 개발 경험을 쌓거나 개발자 간의 네트워킹의 기회가 적기 때문에 이를 해소하고자 개최되었습니다.앞으로 HY-THON이 한양대학교 ERICA의 대표적인 교내 행사 중 하나로 자리 잡기를 희망하고 있습니다! 일주일 동안 6~7명끼리 팀을 이뤄 ..
프로젝트를 진행할 때, API 구현이 끝나면 로컬 환경에서 swagger로 테스트해 보고 git push 한 뒤 PR을 올리기로 했었다. PR이 승인되면 develop 브랜치에 머지하고, 배포(개발) 환경에서 잘 돌아가는지 확인하고 나서야 안심했던 기억이 있다. 로컬 환경에서 테스트할 때나 PR을 올리기 전 매번 application.yml을 수정해야 했는데, 이게 참 간단하면서도 번거로웠다. 아래에 application.yml의 일부를 가져와 봤다. spring.datasource.url(username, password) 부분에서 로컬 환경과 배포(개발) 환경의 값을 다르게 설정해야 정상적으로 테스트할 수 있다.spring: # 로컬 datasource: url: jdbc:mysql://loc..
1. 부트스트랩 적용하기부트스트랩(Bootstrap)간단한 웹 페이지를 만들기 위해 프로젝트를 생성한 뒤, HTML을 편리하게 개발하기 위해 부트스트랩을 적용했다.부트스트랩(Bootstrap)은 웹 사이트를 쉽게 만들 수 있도록 도와주는 HTML, CSS, JS 프레임워크다. 하나의 CSS로 휴대폰, 태블릿, 데스크탑까지 다양한 기기에서 작동한다. 또, 다양한 기능을 통해 웹 사이트를 제작, 유지, 보수할 수 있다.3학년 1학기 웹프레임워크개발 강의에서 Django를 배울 때 함께 배운 적이 있는데, 이걸 사용하면 백엔드(?)스러운 딱딱한 화면도 그럴싸하게 변한다. CSS 말고 JS도 적용할 수 있어 간단하게 움직이는 웹 페이지를 만들 수 있다. 부트스트랩 공식 사이트에서 파일을 다운받고 압축을 풀어 사..
1. HTTP 응답스프링(서버)에서 응답 데이터를 만드는 방법은 크게 3가지로 나눌 수 있다.정적 리소스ex. 웹 브라우저에 정적인 HTML, CSS, JS를 제공할 때 사용한다.뷰 템플릿 사용ex. 웹 브라우저에 동적인 HTML을 제공할 때 사용한다.HTTP 메시지 사용HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. 아래에서 하나씩 알아보자. 정적 리소스스프링 부트는 classpath의 다음 디렉토리에 있는 정적 리소스를 제공한다./static, /public, /resources, /META-INF/resources src/main/resources는 리소스를 보관하는 곳이면서 classpath의 시..
1. HTTP 요청기본, 헤더 조회RequestMappingRequestHandler가 동작하는 애노테이션 기반의 스프링 Controller는 다양한 파라미터를 지원한다. 기본값과 헤더값을 꺼내는 방법을 알아보자.Locale우선순위가 가장 높은 Locale 정보(현재 시스템에 설정된 국가 및 언어 설정)를 조회한다.우선순위나 처리 방법은 LocaleResolver 참고@RequestHeader MultiValueMap headerMap모든 HTTP header를 MultiValueMap 형식으로 조회한다.@RequestHeader("host") String host특정 HTTP 헤더를 조회한다.속성필수 값 여부: required / 기본 값 속성: defaultValue@CookieValue(value ..
저번 섹션까지 서블릿과 관련한 프로젝트는 마무리됐다. 이후 스프링 MVC를 집중적으로 학습하기 위해 새로운 스프링 프로젝트를 생성한다. 1. 프로젝트 생성 및 기초 작업이때 뷰 템플릿 엔진으로 JSP 대신 Thymeleaf를 사용하기 때문에 Packaging을 War 대신 Jar로 선택해야 한다.Jar를 사용하면 항상 내장 서버(톰캣 등)를 사용하고, webapp 경로도 사용하지 않는다. 내장 서버 사용에 최적화돼 있는 기능이라, 최근에는 스프링 부트 사용 시 주로 이 방식을 사용한다.War는 WAS를 별도로 설치하고, 그곳에 빌드된 파일을 넣을 때 사용한다. 물론 내장 서버도 사용 가능하지만, 주로 외부 서버에 배포하는 목적으로 사용한다. Welcome 페이지 만들기스프링 부트에 Jar를 사용하면 스..
🐛이슈- 발생한 오류 copy & paste- 오류가 발생한 상황 간략히 설명오늘 하루 예산을 조회하는 API와 오늘부터 말일까지의 날짜별 하루 예산을 조회하는 API에서 오류가 생겼었다.구체적인 오류8월 12일에 배포 서버의 swagger에서 테스트한 결과, 원래대로면 12일부터 31일까지의 하루 예산만 나와야 했지만, 10일과 11일의 하루 예산까지 조회되는 문제가 발생했다.로컬 서버의 swagger 테스트 결과는 정상적으로 나오는 것까지 확인했다.상황CICD 파이프라인이 돌아간 마지막 날짜는 8월 10일이었다. 날짜가 수상하게 들어맞는다는 생각이 들어서, DayBudgetService가 스프링 빈으로 등록될 때 or 배포가 진행될 때 날짜가 고정돼버려서 생긴 문제가 아닐지 의심하게 됐고, 해당 코..