이직 준비를 위해 알고리즘 문제 풀이 연습을 하다가 매 번 막히는 부분이 있습니다. 바로 조합(Combination)을 만드는 부분인데요, 어느 정도 시도해보다가 잘 안 되면 답을 베끼는 것이 몸에 배다보니 그 순간에만 대충 이해하고 넘어가고, 다음 번에 비슷한 유형의 문제를 만났을 때 어김 없이 문제를 풀지 못하는 저의 모습이 너무 한심해 기록으로 남겨보려고 합니다. 조합(Combination) 먼저 조합은 n 개중 r 개를 고르는 경우의 수를 구할 때 사용합니다. 수식으로는 이렇게 표현합니다. 재귀(Recursive) 알고리즘을 이용해 조합 구하기 앞서 살펴본 수식을 점화식 형태로 표현하기 위해 규칙을 찾아봅시다. 5개 중 3개를 선택하는 경우, 하나를 반드시 포함한 상태에서는 나머지 4개 중 2개만..
IntelliJ로 개발을 하다 보면 업데이트의 영향인지 갑자기 앱이 종료될 때가 있습니다. (현재 저는 Mac OS는 Big Sur 11.4 버전을, IntelliJ는 2021.1.2 버전을 사용하고 있는데 아주 환장의 콜라보 상태입니다) 로컬에서 스프링 부트 애플리케이션을 개발하면서 별 다른 설정 없이 기동시켰다면 8080 포트로 앱이 실행되었을 거고 갑자기 앱이 종료되면 이 프로세스까지 같이 종료되지 않기 때문에, 다시 앱을 켜고 스프링 부트 앱을 실행시키면 Web server failed to start. Port 8080 was already in use. 이런 에러 로그를 마주하게 됩니다. 이럴 땐 터미널 내에서 아주 간단하게 해당 포트를 물고있는 프로세스를 종료할 수 있습니다. jaime > ..
JPA를 다루다보면 Entity를 생성할 때 반복적으로 해줘야 할 일들이 있습니다. @Entity 애너테이션을 클래스 이름 위에 생성해줘야 하고, lombok을 같이 사용하는 경우 @Getter, @Setter 등을 경우에 따라 생성해줘야 합니다. 특히 IntelliJ Ultimate 버전을 사용하게 되면 DataSource와 자동으로 연동하여 JPA 관련된 속성들을 파악해 컴파일타임에 바로바로 에러나 경고를 표시해주기도 합니다. 그래서 계속 반복적인 작업을 하는게 귀찮기도 하고 바로바로 나타나는 빨간 줄들이 신경쓰이기도 해서 거의 기본 포맷처럼 사용하는 Entity 클래스를 Live Template 기능을 사용해 정의해봤습니다. 먼저 설정 탭에서 Live Template을 검색한 뒤 Java 항목을 찾..
IntelliJ에서 스프링 개발을 하다보면 application.properties 파일에 한글 값을 넣을 때가 종종 있습니다. 하지만 설정 값을 @Value 값을 이용해 Injection하고 출력해보면 아주 이상한 값이 출력되는 것을 확인할 수 있습니다. 이 문제를 해결하기 위해선 유니코드 인코딩을 한 뒤 설정 값에 넣어줘야 합니다. 하지만 계속 값을 인코딩하고 설정파일에 붙여넣는다면 매우 불편하겠죠. 다행히 IntelliJ에서 자동 변환을 해줍니다. Preferences - File Encodings로 들어가셔서 Transparent native-to-ascii conversion을 체크하시면 설정파일(.properties)에 한글이 포함되었을 경우 알아서 유니코드 인코딩을 해줍니다.
Overview 스프링 부트에서 graceful shutdown을 사용하는 방법을 소개합니다. 먼저 graceful shutdown은 애플리케이션 서버 종료시 새로운 요청은 받지 않고 기존 요청을 완전히 처리한 이후 서버를 종료하는 것을 말합니다. 스프링 부트 2.3 이상 버전부터 동작합니다. 참고로 이전 버전에서는 응답을 보내기 전에 서버를 종료했을 경우 클라이언트가 응답을 받지 못합니다. 설정 파일 설정 파일 수정만으로 간단히 해당 기능을 구현할 수 있습니다. 서블릿 기반 MVC와 reactive stream 기반 webflux에서도 동작합니다. 타임아웃 설정도 추가할 수 있습니다. 단, 요청을 처리하는 시간보다 타임아웃으로 설정한 시간이 짧을 경우 클라이언트는 응답을 받을 수 없습니다. 이 경우 g..
Overview 스프링 부트를 이용하여 도커 이미지를 쉽게 만드는 방법을 소개합니다. 스프링 부트의 계층(layer)중 중복으로 포함되는 계층(라이브러리, 부트 로더 등)을 캐싱하여 효율적으로 도커 이미지를 생성합니다. Spring Boot Version 2.3 이상 build.gradle spring-boot-gradle-plugin dependency 추가 bootJar task에 layered 추가 layered()는 deprecated 되었음 layered(Action action) 사용 권장 dependencies { implementation 'org.springframework.boot:spring-boot-gradle-plugin:2.5.0' } bootJar { layered() } Gr..
얼마전에 이직하려고 이력서를 제출했다가 과제 안내를 받았는데 과제 스펙을 보자마자 보자마자 포기했던 슬픈 기억이 있습니다. 그 이유는 바로 프론트엔드 개발이 포함되어있었기 때문인데 백엔드 개발자로 지원했는데 프론트를 구현해야 하는 상황이 이해가 안 갔고, 회사 업무가 너무 바빠 프론트까지 공부할 여력이 없었기 때문입니다. (요구사항에는 간단히 기능만 확인할 수 있을 정도로 간단히 구현하라고 되어있었지만..) 그래서 주말인데 비도 오고해서(사실 할 게 없어서..) 인프런 무료 강좌중 thymeleaf를 이용해 간단한 서비스를 만드는 것을 수강하기로 결심하고 열심히 수강하고 있었습니다. 강의 내용중 요구사항 분석 - 도메인 설계 및 개발 - 도메인 테스트 - 서비스 개발 - 서비스 테스트로 이어지는 개발 프..
Factor는 제한된 수의 다른 값들을 저장하는 변수입니다. 이런 변수들을 범주형 변수(categorical variable)라고 부릅니다. 데이터 셋에는 두 가지 유형의 변수가 있습니다. categorical(범주형) 값이 제한되고, 특정 유한한 그룹을 기반으로 함 ex) 나라, 연도, 성별, 직업 등 continuous(연속형) 정수(integer)부터 십진수(decimal)까지 모든 값을 가질 수 있음 ex) 수익, 주가 등 범주형 변수(categorical variable) R은 범주형 변수를 Factor에 저장합니다. 아래는 문자 변수를 Factor 변수로 변환하는 코드 입니다. > factor(x = character(), levels, labels = levels, ordered = is.o..
행렬이란 우리가 익히 알고있는 행과 열로 구성된 2차원 배열입니다. 즉, 같은 데이터 타입을 가지고 있는 두 개 이상의 벡터의 조합이라고 할 수 있습니다. 생성 matrix()라는 함수를 이용하여 행렬을 생성할 수 있습니다. matrix()는 세 가지의 필수 파라미터를 가집니다. > matrix(data, nrow, ncol, byrow = FALSE) data: 행렬을 구성할 요소들의 컬렉션 nrow: 행 수 ncol: 열 수 byrow: row(행)를 기준으로 데이터를 채움, col(열)을 기준으로 채우려면 FALSE(기본값)를 사용 행렬 생성 > matrix_test = matrix(1:10, byrow = TRUE, nrow = 5) > matrix_test [,1] [,2] [1,] 1 2 [2..
기본 데이터 유형(Basic Data Type) R 프로그래밍은 다음과 같은 다양한 데이터 유형으로 작동합니다. Scalars Vectors (numerical, character, logical) Matrices Data frames Lists 기본 유형 numeric: 십진수 ex) 4.5 integer: 정수, numeric의 한 종류 ex) 4 boolean: 부울 값, logical 이라고 불림 ex) TRUE, FALSE string: 문자열, "" 또는 '' 사이의 텍스트, character라고 불림 class(var) 함수로 변수의 유형을 확인할 수 있습니다. > x = 28 > class(x) [1] "numeric" > x class(x) [1] "numeric" > y = TRUE >..
R을 사용하기 위해선 IDE를 설치해야 합니다. Rstudio는 사용자 친화적이고 오픈 소스이며 Anaconda 플랫폼의 일부이므로 사용 가능한 최고의 IDE입니다. Anaconda 설치 Anaconda란? Anaconda 무료 오픈 소스는 Python과 R 프로그래밍 언어를 모두 배포하고 있습니다. Anaconda는 과학 커뮤니티 및 데이터 과학자에서 기계 학습 프로젝트 또는 데이터 분석을 수행하기 위해 널리 사용됩니다. 왜 Anaconda를 사용하나요? Anaconda는 Python 또는 R에 필요한 모든 라이브러리를 관리하는 데 도움이됩니다. Anaconda는 패키지 관리를 단순화하기 위해 필요한 모든 라이브러리와 IDE를 단일 폴더에 설치합니다. 그렇지 않으면 별도로 설치해야합니다. 맥 사용자 1..
R이란? R은 1993 년 Ross Ihaka와 Robert Gentleman이 개발 한 프로그래밍 언어로 광범위한 통계 및 그래픽 라이브러리를 보유하고 있습니다. 머신 러닝 알고리즘, 선형 회귀, 시계열, 통계적 추론이 여기에 해당합니다. 대부분의 라이브러리는 R로 작성되지만 많은 계산을 필요로 하는 경우 C, C++, 포트란을 이용해 작성하기도 합니다. R은 교육용이나 학계에서만 사용될 뿐 아니라 많은 대기업들도 사용하고 있습니다. 대표적으로 구글, 우버, 에어비엔비, 페이스북 등이 있죠. R을 사용한 데이터 분석은 각 단계별로 사용할 수 있고 그 용도는 아래와 같습니다. 프로그램: R은 명확하고 접근하기 쉬운 프로그래밍 도구임 변환: R은 데이터 과학을 위해 특별히 설계된 라이브러리 모음으로 구성됨..
저는 취미생활(?)의 일환으로 네이버 지식인에 답변을 달아주고 있습니다. (현재 무려 바람신😎) 제가 대학생 때는 현재 창업한 회사에서 CTO로 활동하다가 모든 일을 맡아서 해야하는 실장이 되어버린 실력자 친구가 있었기 때문에 잘 모르면 무조건 그 친구에게 쪼르르 달려가서 질문을 하곤 했습니다. 하지만 그 친구를 만난 건 3학년 2학기.. 그 전까지는 고만고만한 친구들과 수업을 제끼고 당구를 치러 가는 게 더 좋았고, 그 친구들이 다 군대가고 나서는 혼자서 질문할 곳이 없어서 많이 힘들어하고 결국엔 휴학까지 했었습니다. 지식인에 올라오는 모든 질문이 저렇게 절박한 처지에 있는 사람이 올리는 글은 아니겠지만 혹시나 그런 처지에 있는 사람이 기댈 곳이 없어서 질문을 했을 수도 있기 때문에(?) 오지랖을 부려..
일반 자바 프로젝트가 아닌 스프링 부트 프로젝트를 이용해서 특정 기능을 구현할 때, 설정파일이나 dependency 관리를 편하게 하고싶은데 spring-boot-starter-web 패키지를 의존성에 추가하게 되면 상당히 많은 양의 사용하지 않을 클래스들을 로딩하게 됩니다. build.gradle 파일에 단순히 하나의 패키지(테스트 패키지까지 포함해도 고작 두 개)가 추가되었을 뿐인데도 기본 상태에서 실행시키면 상당히 많은 시간이 소모됩니다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' testImplementation('org.springframework.boot:spring-boot-starter-t..
소스부터 보시죠! import java.io.FileOutputStream; import java.io.IOException; import java.net.URL; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class FileDownloader { public static void main(String[] args) throws IOException { URL website = new URL("https://www.naver.com/"); Re..
- Total
- Today
- Yesterday
- intellij
- leetcode
- 함께 자라기 후기
- 헥사고날 아키텍처
- Jackson
- Linux
- QueryDSL
- gRPC
- Spring Boot Tutorial
- 스프링 부트 튜토리얼
- 함께 자라기
- spring boot app
- r
- Java
- Spring Data JPA
- 스프링부트
- spring boot application
- 스프링 부트 회원 가입
- 스프링 부트
- @ManyToOne
- 스프링 부트 애플리케이션
- 클린 아키텍처
- Spring Boot
- 스프링 데이터 jpa
- 알고리즘
- proto3
- JSON
- Spring Boot JPA
- spring boot jwt
- JPA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |