본문 바로가기

Spring

(13)
Spring Boot에서 파일 업로드 용량 설정 application.yml 파일에 아래와 같이 설정해주면 요청받는 파일 용량을 제한해준다. spring: servlet: multipart: max-file-size: 15MB max-request-size: 15MB
CreatedBy, LastModifiedBy 기능 구현 PA Auditing 기능과 @CreatedBy, @LastModifiedBy 를 사용하여, 데이터가 생성되거나 수정될 때 유저의 ID가 DB에 저장되게 기능을 구현했다. 우선 BaseTimeEntity에 @CreatedBy와 @LastModifiedBy를 추가해줬다. User의 ID를 JPA에서 인식하려면, AuditorAware을 구현한 클래스가 필요하다. 아래와 같이 LoginUserAuditorAware 클래스를 만들어서 Long Type의 UserId를 반환하도록 했다. 유저 정보는 세션에서 가져오고, 없을 경우 null을 반환한다. import com.jojoldu.book.springboot.config.auth.dto.SessionUser; import lombok.RequiredArgsC..
자동 배포시 step3에 쌓이는 프로젝트 jar 파일들 삭제 배포할 때마다 쌓이고 있는 파일들... start.sh에 이전 Build 파일 삭제하는 부분을 추가해줬다.
Version 2 of the Ruby SDK will enter maintenance mode as of November 20, 2020 에러 해결 스프링 부트와 AWS로 혼자 구현하는 웹서비스의 무중단 배포 구현 부분에서 profile.sh, stop.sh, start.sh, health.sh, switch.sh 를 작성하고 아래와 같은 에러를 Trivis CI에서 만났다. 검색 결과 다른 사람들의 경우 원인들이 아래와 같았다. appspec.yml 파일 에러 (오타, 들여쓰기 등) CodeDeploy 그룹의 태그를 잘못 입력함 (키를 Name이 아닌 임의의 값으로 설정) .travis.yml 파일 에러 (오타) 하지만 내 경우 모두 체크해도 아니었었고, ShellScript들(profile.sh, stop.sh, start.sh, health.sh, switch.sh)에 오타가 있음을 발견하고 오타들을 수정했다. 그 후, AWS CodeDeplo..
Failed to load driver class org.mariadb.jdbc.Driver AWS 서버에서 Deploy.sh 스크립트 작동 시 아래와 같은 에러가 났다. 에러 로그는 nohup.out 파일에서 확인했다. Failed to load Driver. Driver Load 문제로 알고보니 Git으로 Pull해온 build.gradle이 이전 버전이었다. 즉, build.gradle에 MariaDB 의존성 부분이 없었다. 다시 Build.gradle을 Push해주었다. 근데, 알고보니 서버에서 Git Pull을 아래와 같은 이유로 못받아오고 있던 상태. Git으로 Pull받았던 폴더 자체를 지우고, 다시 Pull을 받았다. Pull받은 걸로 다시 ./deploy.sh 로 Deploy 쉘 스크립트를 돌려보니 아래와 같은 에러가 났다. gradlew에 write권한이 없어서, Build가 ..
swapfile not a directory '스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책 297페이지의 ./gradlew test 명령줄에서 아래와 같은 에러가 SSH Console창에 찍혔다. OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000eaaa0000, 178978816, 0) failed; error='Cannot allocate memory' (errno=12) gradlew로 Build 중 나타난 에러로, Google 한 결과 원인은 JVM 구동 시 메모리 부족이 문제였다. 아래 블로그 내용을 참조하여 SWAP을 설정하며 문제를 해결했다. https://bhsbhs235.github.io/jenkins/2019/12/29/jenkinserror.html..
7. AOP (Aspect Oriented Programing) AOP가 필요한 상황 AOP는 핵심적인 로직을 구현하는데 있어서 핵심적인 로직과는 무관하지만 보조적으로 중간에 삽입해야 하는 로직들에 대해서 외부로 따로 빼놓고, 실행될때 자동으로 중간에 보조적 로직을 삽입하여 실행하도록 하는 것입니다. 핵심 관심 사항 (core concern) vs 공통 관심 사항 (cross-cutting concern) Ex) 모든 메소드의 호출 시간을 측정하고 싶다면? 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? AOP 적용 이전 AOP 적용 핵심 관심 사항과 공통 관심 사항 분리 AOP 적용 이전 MemberSerivce의 메소드마다 회원 조회 시간 측정 추가 시간을 측정하는 기능은 핵심 관심 사항이 아니다. 시간을 측정하는 기능은 공통 관심 사항이다. 시간을 측정하는..
6. 스프링 DB 접근 기술 H2 데이터베이스 설치 H2 윈도우에 설치 H2 다운로드 사이트에 들어가서 Last Stable 버전을 다운 후 설치한다. 사이트 주소: http://www.h2database.com/html/download.html 윈도우라 윈도우 버전 설치. 설치된 H2의 bin의 h2.bat을 클릭해 실행시킨다. 자동으로 웹 H2 콘솔이 뜬다. 처음에 비밀번호가 없으므로 그냥 연결 누르면 된다. h2.bat파일 실행시킬 때 나오는 CMD 창을 꺼버리면 페이지에 연결할 수 없다고 나온다. Spring에 H2 데이터베이스 연결 build.gradle의 dependencies에 jdbc와 H2 관련 라이브러리 추가. 참고로 runtimeOnly는 실행 시점에만 사용이란 의미. ComplieOnly는 컴파일 시점에만 사용..
5. 웹 MVC 개발 화면 웹 기능 - 홈 화면 추가 GetMapping으로 "/"을 해놓으면 기본으로 Welcome Page로 제공하는 Index.html보다 더 우선순위가 높다. 즉 컨트롤러가 정적 파일보다 우선 순위가 높다. 화면 웹 기능 - 등록 등록 화면 만들기 등록 기능 만들기 Entity인 Member 대신 DTO로 사용할 MemberForm 객체 만들기. Domain의 Entity는 DTO로 절대 사용하면 안된다. 왜냐하면 Entity는 직접 DB에 사용하는 개체이므로 View단에서 쓰이는 DTO와 분리를 해줘야 한다. 조회는 Get 방식, 저장은 Post 방식으로 한다. 화면 웹 기능 - 조회
4. 스프링 빈과 의존관계 스프링은 웹 어플리케이션 실행 시 스프링 컨테이너에 스프링 빈을 등록해서 의존 관계를 자동으로 설정해준다. 스프링을 사용하면 객체를 스프링 빈으로 등록해서 써야 얻는 이점이 많다. 스프링 Bean 등록 방법에는 2가지가 있다. 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링 빈 등록하기 두가지 방법 모두 알아야 한다. 컴포넌트 스캔과 자동 의존관계 설정 컴포넌트 스캔 컴포넌트 스캔은 @SpringBootApplictaion이 있는 패키지와 하위 패키지들을 전부 조사해서 @Component가 있는 객체를 모두 스프링 컨테이너의 스프링 Bean으로 등록한다. hello.hellospring 패키지와 하위 패키지의 @Component가 있는 클래스만 스프링 컨테이너의 스프링 Bean으로 생성 @S..