[설정] 백엔드 API, HTTP 기본 요청 매핑 및 RestControllerAdvice예외처리
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
Controller - RestController의 차이Controller는 응닶값이 기본적으로 HTML을 주도록 되어있음 -> 이는 백엔드와 프론트엔드의 차이가 없었을 때 나온 것으로 풀스택 개발시 활용되어왔음. 데이터를 뷰에 넘김RestController는 응답값으로 Rest API요청에 대한 응답(주로 JSON으로 응답 넘김)으로 사용됨. 데이터만 넘김GetMappingGetMapping에서 @RequestParam과 PathVariable의 사용 시기PathVarible특정 객체의 id값만을 가지고 단일 객체로 가져오려고 할 경우@GetMapping("/order/{orderId}") public String getSomething(@PathVariable String orderId) { ..
[설정] Spring Security와 JWT로 로그인 기능 구현
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
의존성 추가implementation 'org.springframework.boot:spring-boot-starter-security'// JWT (Java JWT) implementation 'io.jsonwebtoken:jjwt-api:0.11.5' implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5' // for Jackson JSON parsing해당 의존성 추가Enum 클래스 설정public enum Authority { ROLE_READ, ROLE_WRITE; }UserDetails 구현하기@Getter @NoArgsConstructor..
[설정] Redis Cache 사용하기 및 스프링부트로 Redis 접근하기
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
Cache성능 향상을 위해 사용하며(빠른 처리), 임시로 데이터를 저장하는 공간이다.RedisKey-Value인메모리 데이터 스토어다양한 형태의 데이터 타입 지원주로 캐시 서버 용도로 많이 사용한다.디스크가 아닌 메모리에 접근해서 데이터를 꺼내오기 때문에 RDBMS에서보다 속도가 빠르다.Redis는 인메모리 방식으로 데이터의 저장용도가 휘발성이지만 영속성 또한 지원한다. 하지만 데이터의 저장방식이 일반 DB보다 안정적이지는 않다. 그렇기 때문에 주로 Cache 서버의 용도로 많이 사용된다.Reids 명령어redis-cli 명령어를 통해 들어온 후set key value -> key-value 설정get key -> value 값 나옴del key -> key-value 삭제get key -> nil, k..
[설정] 복합 유니크 키 설정 및 DB Index
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
복합 유니크 키@Entity @Table(uniqueConstraints = { @UniqueConstraint( columnNames = {"companyId","date"} ) }) public class DividendEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private Long companyId; private LocalDateTime date; private String dividend;복합 유니크키는 여러 컬럼을 묶어서 유니크한 제약 조건을 만드는 기능이다.단일 컬럼이 아닌 ..
[설정] 삽입하려는 데이터의 중복 키 발생 시 레코드 무시하고 삽입하는 방법
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
Insert Ignore동작 방식 : 만약 삽입하려는 데이터가 중복 키 충돌을 일으킬 경우, 해당 레코드를 무시하고 삽입을 진행하지 않는다. 에러를 발생시키지 않으며, 충돌된 레코드를 제외한 나머지 레코드는 정상적으로 삽입 된다.CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50) UNIQUE);-- 처음 데이터 삽입INSERT INTO users (id, username) VALUES (1, 'Alice');-- 중복된 id나 username이 있으면 무시함INSERT IGNORE INTO users (id, username) VALUES (1, 'Alice'), (2, 'Bob');id = 1에 대한 값이 이미 존재하므로 무시하고 i..
[설정] 백엔드 API Pageable 사용하기
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
@GetMapping("/companies") public ResponseEntity searchAllCompany(final Pageable pageable) { return ResponseEntity.ok(companyService.getAllCompany(pageable)); }해당 url매핑에서 pageable을 인자로 받아준다.그 후 요청시에 url 매핑에 size와 page에 대한 추가 정보를 같이 쿼리 스트링으로 넘긴다.GET localhost:8080/companies?size=2&page=1size는 한 페이지에 나와야 할 element의 개수를 의미하며 page는 index 0부터 작동된다.그럼 1번째 인덱스(2번째 페이지)의 element 2개를 보여달라는 의미이다.sor..
[설정] 자동완성 검색 기능 Trie와 DB LIKE문 활용
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
트리형 자료구조문자열 탐색을 효율적으로 할 수 있음중복 저장 XTrie에 데이터 저장하기삽입하고자 하는 문자열을 앞에서부터 한 글자씩 가져온다트리의 루트부터 적합한 노드 위치를 찾아가면서 저장마지막 글자까지 삽입이 되면 isEnd 플래그로 단어의 끝을 표시Trie에서 데이터 검색하기인풋으로 받은 문자열을 한글자씩 파싱파싱된 문자를 앞에서부터 비교해당 문자 노드가 존재하지 않거나, 리프노드에 도달할 때 까지 탐색시간 복잡도트라이 구조안에 포함된 가장 긴 단어의 길이를 가진 길이만큼 발생하게 된다O(L)단점메모리 공간을 많이 차지함스프링부트에서 Trie 라이브러리 사용하기implementation 'org.apache.commons:commons-collections4:4.4'해당 라이브러리의 의존성을 주입..
[설정] 동적인 상태로 URL 매핑하는 방법
·
프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI
private static final String SUMMARY_URL = "https://finance.yahoo.com/quote/%s?p=%s";이런 코드가 있다는 가정하에String.format을 통해 입력값으로 url을 바꿀 수 있음.String url = String.format(SUMMARY_URL, ticker, ticker);이렇게 하면 첫번째인자에 URL이 들어오고 순서대로 %s, %s에 ticker가 들어가면서 동적인 URL이 생성됨.
cheolhyeon
'프로젝트 트러블 슈팅 및 몰랐던점 정리/StockDividendAPI' 카테고리의 글 목록