전체 글

CS/알고리즘

Python 정리해보기

리스트 N*M 크기의 2차원 리스트 초기화 array = [[0] * m for _ in range(n)] 인덱싱을 통해 자료형의 값을 얻을 수 있음 함수명 설명 시간 복잡도 append() 리스트에 원소 삽입 O(1) sort() 오름차순 정렬 O(NlogN) sort(reverse = True) 내림차순 정렬 reverse() 순서 뒤집기 O(N) insert(삽입할 위치 인덱스, 값) 특정 인덱스에 원소 삽입 O(N) count(특정 값) 특정 값을 가지는 데이터 개수 세기 O(N) remove(특정 값) 특정 값을 가지는 원소 제거(하나만) O(N) # 리스트에서 특정 값을 가지는 원소 모두 제거 remove_set = {3, 5} result = [i for i in a if i not in r..

Trouble Shooting

Spring Boot 프로젝트 배포 자동화 설정 문제 해결

Spring Boot 프로젝트의 배포 자동화를 설정하기 위해 아래 블로그를 순차적으로 따라가다 문제가 발생하였다! ! Github Actions CD: AWS EC2 에 Spring Boot 배포하기 Overview 애플리케이션을 개발하면 외부에서도 접근 가능하도록 클라우드 환경에 배포합니다. 이전에 포스팅 했던 AWS 1편에서는 마지막에 scp 명령어로 로컬에 존재하는 빌드 파일을 EC2 인스턴스 bcp0109.tistory.com 모든 설정을 마치고 코드를 변경하여 github repository에 올렸을 때, 처음 발생한 Error는 다음과 같았다. Error: Error: Gradle script '/home/runner/work/modugarden-server/modugarden-server/g..

Spring Boot

Spring Boot 예외 처리

Java에서의 예외 처리 → try-catch 문 Spring Boot 에서의 에러 처리 @ControllerAdvice 컨트롤러에 대해 전역적으로 ExceptionHandler를 적용해줌 -> 전역적으로 에러를 다루는 클래스로 에러 처리를 위임 @RestControllerAdvice -> @ResponseBody가 붙어있어 응답을 JSON으로 내려줌 하나의 클래스로 모든 컨트롤러에 예외 처리가 가능 직접 정의한 에러 응답을 클라이언트에게 줄 수 있음 별도의 try-catch 문이 없어 코드의 가독성이 높아짐 @RestControllerAdvice를 이용한 Spring 예외 처리 1. 에러 코드 정의 @Getter @RequiredArgsConstructor public interface ErrorCod..

JPA/스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화

[스프링 부트와 JPA 활용2 - API 개발과 성능 최적화] 3. API 개발 고급 - 지연 로딩과 조회 성능 최적화

주문 + 배송정보 + 회원을 조회하는 API 지연 로딩 때문에 발생하는 성능 문제를 단계적으로 해결! 간단한 주문 조회 V1: 엔티티를 직접 노출 → 사용하면 안 됨! 양방향이 걸리는 곳에 @JsonIgnore을 해주어야 함 지연로딩 LAZY로 되어 있다면 실제 엔티티 대신에 프록시를 가져옴 순수한 자바 객체가 아니므로 JSON에서 오류가 발생함 Hibernate5Module 을 스프링 빈으로 등록하면 해결(스프링 부트 사용중) 간단한 주문 조회 V2: 엔티티를 DTO로 변환 엔티티를 DTO로 변환하는 일반적인 방법 쿼리가 총 1 + N + N번 실행됨 order 조회 1번(order 조회 결과 수 N) order -> member 지연 로딩 조회 N 번, order -> delivery 지연 로딩 조회..

JPA/스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화

[스프링 부트와 JPA 활용2 - API 개발과 성능 최적화] 2. API 개발 고급 - 준비

조회용 샘플 데이터 입력 userA JPA1 BOOK JPA2 BOOK userB SPRING1 BOOK SPRING2 BOOK InitDb @Component // 클래스를 빈으로 등록 @RequiredArgsConstructor public class InitDb { private final InitService initService; @PostConstruct // 의존성 주입이 이루어진 후 빈 초기화 수행 public void init() { initService.dbInit1(); initService.dbInit2(); } @Component @Transactional @RequiredArgsConstructor static class InitService { private final Enti..

JPA/스프링 부트와 JPA 활용 2 - API 개발과 성능 최적화

[스프링 부트와 JPA 활용2 - API 개발과 성능 최적화] 1. API 개발 기본 - 회원 API

@RestController : @Controller + @ResponseBody(데이터를 json이나 xml로 보냄) @RequestBody : json 데이터를 member에 매핑해 넣어줌 @Valid : javax validation 자동으로 수행 MemberApiController 회원 등록 API @PostMapping("/api/v1/members") public CreateMemberResponse saveMemberV1(@RequestBody @Valid Member member) { //@RequestBody -> json 데이터를 member에 매핑해 넣어줌, @Valid -> javax validation 자동으로 수행 Long id = memberService.join(member)..

JPA/스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 7. 웹 계층 개발

웹 계층 개발 회원 등록, 조회 폼 객체를 사용해서 화면 계층과 서비스 계층을 명확하게 분리한다. MemberForm @Getter @Setter public class MemberForm { @NotEmpty(message = "회원 이름은 필수입니다.") private String name; private String city; private String street; private String zipcode; } MemberController @Controller @RequiredArgsConstructor public class MemberController { private final MemberService memberService; @GetMapping("/members/new") publi..

JPA/스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 3~6. 도메인 개발

애플리케이션 아키텍처 계층형 구조 사용 controller, web: 웹 계층 service: 비즈니스 로직, 트랜잭션 처리 repository: JPA를 직접 사용하는 계층, 엔티티 매니저 사용 domain: 엔티티가 모여 있는 계층, 모든 계층에서 사용 패키지 구조 jpabook.jpashop domain exception repository service web Repository //ex) MemberRepository @Repository // spring bean으로 자동 등록됨 @RequiredArgsConstructor // final 있는 필드만 가지고 생성자 만들어 줌 public class MemberRepository { //@PersistenceContext spring이 엔티티 ..

JPA/스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

[스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 2. 도메인 분석 설계

요구사항 분석 + 상품 주문시 배송 정보를 입력할 수 있다. 도메인 모델과 테이블 설계 회원 엔티티 분석 회원 테이블 분석 엔티티 클래스 개발 실무에서는 가급적 Getter는 열어두고, Setter는 꼭 필요한 경우에만 사용하는 것을 추천 엔티티를 변경할 때는 Setter 대신에 변경 지점이 명확하도록 변경을 위한 비즈니스 메서드를 제공해야 함 테이블은 타입이 없으므로 구분이 어려워 관례상 "테이블명 + id" 를 많이 사용한다. 실무에서는 @ManyToMany 를 사용 x 중간 테이블( CATEGORY_ITEM )에 컬럼을 추가할 수 없고, 세밀하게 쿼리를 실행하기 어렵기 때문에 실무에서 사용하기에는 한계 존재 일대다, 다대일 매핑으로 풀어내서 사용 값 타입은 변경 불가능하게 설계해야 한다. JPA 스..

카테고리 없음

Git

cd 폴더명 : 폴더 안으로 이동 cd .. : 폴더 밖으로 이동 dir : 현재 폴더의 파일들 보기 mkdir 폴더명 : 폴더 생성 폴더에서 cmd → 폴더 위치에서 바로 cmd 실행 git init : .git 폴더 생성 - .git 폴더가 생성된 폴더는 git이 관리하기 시작 git status : 현재 git 상태 보여줌 git add . : 모든 파일 스테이징(추적 시작) git commit -m “message” : 메세지 이름으로 현재 추적하고 있는 코드 찰칵 git log : 커밋 로그를 확인 git reset --hard 커밋해쉬코드(번호) : 커밋 번호에 해당하는 커밋으로 코드 롤백 git reset --hard : 마지막 커밋한 상태로 돌아감 git remote add origin 리..

koeyhk
개발 블로그