본문 바로가기

개발일지

(20)
[메모] Spring 원리 (2) 컴포넌트 스캔, 의존관계 자동주입 - 스프링 Annotation - 스프링에서는 컴포넌트 스캔을 통해 자동적으로 의존관계를 주입하도록 할 수 있다. @Controller: 스프링 MVC 컨트롤러로 인식한다. @Repository: 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다. @Configuration: 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다. @Service: 특별한 처리를 하지 X, 개발자들이 핵심 비즈니스 걔층을 인식하는데 도움을 준다. - ComponentScan FilterType - FilterType은 5가지 옵션이 있다. ANNOTATION: 기본값, annotation을 인식해서 동작 ASSIGNABLE_TYPE: 지정한 타입..
[메모] Spring 원리 (1) 싱글톤 - 싱글톤 패턴 - 순수한 DI 컨테이너인 AppConfig를 통해 요청을 하면, 매 트래픽마다 객체를 생성 -> 기존 방식은 메모리 낭비가 심해질 수 있다. 해결방안: 해당 객체가 딱 1개만 생성되고, 공유하도록 설계 -> 싱글톤 패턴 싱글톤 패턴 구성 package springprinciple.core.singleton; public class SingletonServiceTest { // 1. static 영역에 객체 instance를 미리 하나 생성 private static final SingletonServiceTest instance = new SingletonServiceTest(); // 2. 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회가능 publi..
[메모] Spring 입문(2) - 스프링 DB - @SpringBootTest DB연동 config를 Spring이 들고 있기 때문에 테스팅 진행에 있어 스프링 컨테이너와 테스트를 함께 실행할 수 있게 해줌 DB연동 이후 Testing 진행 시 @Transaction 적용하면 DB에 실제 데이터 반영 없이(다음 테스트에 영향 없이) 테스팅 진행 가능 (@AfterEach, BeforeEach 사용 불필요) JPA 스프링 Repository 관련 예제 코드 package winterlimited.hellospring.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import winterlimited.hellosprin..
[메모] Spring 입문(1) Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. - 스프링 부트 라이브러리 - spring-boot-starter-web spring-boot-starter-tomcat: 톰캣(웹 서버) spring-webmvc: 스프링 웹MVC spring-boot-stater-thymeleaf: 타임리프 템플릿 엔징(View) spring-boot-stater(공통): 스프링 부트 + 스프링 코어 + 로깅 spring-boot spring-core spring-boot-stater-loggin logback + slf4j - 테스트 라이브러리 - spring-boot-starter-test junit: 테스트 프레임워크 mockito: 목 라이브러리 assertj: 테스트 코드 작성의 편리함 제공 s..
[BOJ 10799번/LowerBound(Binary Search)] 쇠막대기 (Java) 문제 링크 https://www.acmicpc.net/problem/10799 10799번: 쇠막대기 여러 개의 쇠막대기를 레이저로 절단하려고 한다. 효율적인 작업을 위해서 쇠막대기를 아래에서 위로 겹쳐 놓고, 레이저를 위에서 수직으로 발사하여 쇠막대기들을 자른다. 쇠막대기와 레이저 www.acmicpc.net 백준 10799번 문제는 주어진 문자열에서 쇠막대기와 레이저의 배치를 나타내고, 몇 개의 조각으로 쇠막대기가 잘려지는지를 구하는 문제이다. 풀이 방법 1) 처음에 구상했던 방법 - 배열을 이용해 쇠막대기 사이 위치의 인덱스들을 모두 돌며 레이저의 개수를 확인하여 쇠막대기의 잘린 조각 개수 세기 스택을 이용한 레이저 및 쇠막대기의 위치 확인 - 여는 괄호 '('를 만나면 스택에 추가한다. - 닫는 ..
[BOJ 5397번/Stack, LinkedList] 키로거 (Java) 문제 링크 https://www.acmicpc.net/problem/5397 5397번: 키로거 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한줄로 이루어져 있고, 강산이가 입력한 순서대로 길이가 L인 문자열이 주어진다. (1 ≤ L ≤ 1,000,000) 강산이가 백스페이스를 입 www.acmicpc.net 백준 5397번 키로거는 실제로 키보드로 입력된 문자열을 기록하여, 키를 누르거나 뗄 때마다 키 입력 상태가 바뀌는 상황에서 입력된 문자열을 출력하는 문제이다. 풀이방법 1) Stack을 이용한 방법 - Stack을 통한 문제해결 동작 방식 문자열 입력 받기 및 Stack 선언(leftStack, rightStack) 입력 받은 문자열을 String으로 저장합니다. 커서를 기준으..
[BOJ 3272번/HashMap] 두 수의 합 (Java) 문제 링크 https://www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 백준 3273번 문제는 수열과 합 문제로, 길이가 n인 수열과 정수 x가 주어졌을 때, 수열에서 두 원소를 선택하여 그 합이 x가 되는 경우의 수를 구하는 문제이다. 풀이방법 1) 투 포인터(Two Pointers)를 이용한 방법 - 투 포인터 알고리즘을 통한 문제해결 동작 방식 시작점(start)과 끝점(end)을 첫 번째 원소의..
CODEF를 이용한 API 일괄처리 시스템을 만들다 생긴 문제들 (OAUTH 2.0 인증, 간편인증) 최근 CODEF API를 이용해 여러 개의 금융정보와 관련된 API를 일괄적으로 받아 관리하는 웹페이지를 만드는 작업을 진행하였습니다. 요청 API 리스트 [고용산재] - 근로자고용정보현황조회 - 보수총액신고서 [국세청] - 신고서 법인세 과세표준 및 세액신고서 - 종합소득세, 농어촌특별세, 주민세 과세표준확정신고 및 납부계산서 - 신고서 표준대차대조표 - 신고서 표준손익계산서 - 신고서 법인세 과세표준 및 세액조정신고서 - 신고서 세액공제명세서 - 신고서 사업소득명세서 - 신고서 공제감면세액 및 추가납부세액합계표(갑) - 증명발급 사업자등록 증명 이렇게 총 11개의 API를 카카오를 이용한 간편 인증을 통해 회원정보를 등록해 관리할 수 있도록 하는 애플리케이션인데 나는 카카오계정 간편 인증 연동과 AP..
[TypeScript] html에서 TypeScript 처음 사용해보기 (1) (TypeScript란?) 저번 Google의 Maps API를 사용해보는 과정에서 기본적으로 API를 TypeScript으로 제공해주는 것을 알았다. JavaScript랑 굉장히 비슷한 이름이어서 확인해보니.. 뭔가 조금 다른 것 같기도 하고..... 어쨌든 저번에 간단하게 사용해봤던 구글 지도는 기존에 사용하던 JavaScript를 이용해 만들게 되었는데, 뭔가 문득 궁금했다. '아니 TypeScript가 무슨 언어길래. 사용자가 얼마나 많기에 Google의 Maps API를 제공해주는 예제 코드를 보여주는데 가장 먼저 보여주는 거지?' 그래서 우연히 개발자 친구랑 얘기를 하다 TypeScript에 대해 묻게 되었고, 나름 친절(?)하게 답변받았다. TypeScript는 기존 JavaScript에서 정적 타입이 지원된 언어로 ..
Google Map API을 다루다 생긴 문제들(geolocation, CORS에러) 전역 후 일단 개인적인 공부도하고~ 알바도하고~ 다 해보는 와중.. 고등학생 때부터 종종했었던 외주를 다시 시작하며 다시 웹사이트를 만들게되었다. 간단한 웹 개발을 도와드리는 외주를 맡게 되었다. 그 과정에서 "Map API"의 사용을 돕게 되었는데,, 1) 첫번째 이슈 - 어떤 종류의 Map API를 사용해야할까 ? 구글 Maps API, 카카오맵 API, 네이버지도 API와 같은 여러 API가 존재했는데, API를 이용해 주변 음식점들에 대한 검색과 정보들을 가져와야 했기에 구글 Maps API는 제외하고, 카카오맵 API를 원하셔서 카카오맵 API로 도와드리게되었다. 카카오맵은 도메인을 입력하여 해당 도메인에서만 사용할 수 있는 특정 Key값을 받아서 사용해야하기 때문에, 일단 간단하게 페이지를 만..