오늘의 학습 키워드피보나치 수열 문제 링크https://leetcode.com/problems/climbing-stairs/description/ 문제 내용당신은 계단을 오르고 있습니다. 정상에 도달하려면 총 n 계단을 올라야 합니다.한 번에 1계단 또는 2계단씩만 오를 수 있습니다.정상까지 오를 수 있는 서로 다른 방법의 수는 몇 가지일까요? 문제 해결 방법n번째 계단까지 오를 수 있는 방법의 수는 (n-1)번째 계단까지 오는 방법 수와 (n-2)번째 계단까지 오는 방법 수의 합과 같다.즉, ways(n) = ways(n-1) + ways(n-2) 가 성립한다. 피보나치 수열을 활용하여 풀면 된다. 구현 코드class Solution { public int climbStairs(int n) {..
오늘의 학습 키워드스택을 큐로 구현하기 문제 링크https://leetcode.com/problems/implement-stack-using-queues/description/ 문제 내용큐를 이용하여 스택을 구현void push(int x) : 스택 맨 위에 원소 x를 삽입int pop() : 맨 위의 원소를 제거하고 반환int top() : 맨 위의 원소 반환boolean empty(): 스택이 비어있는지 여부 확인 문제 해결 방법일단 스택과 큐의 개념을 다시 짚어보면서 두 자료구조의 차이점을 파악했다. 스택은 LIFO(Last In First Out), 큐는 FIFO(First In First Out)이다. 문제를 푸는 방법은 총 2가지가 있다. 1. 큐 2개를 이용했다. q1이 기존 큐, q2를 새..
hELLO 스킨을 적용한 후 PC에서 보면 이미지가 본문 영역을 벗어나는 것을 확인했다.이를 해결하고자 스킨 편집에서 아래와 같이 (기존에 있던 코드는 삭제하고) max-width, margin-left, margin-right 부분을 추가했다. 적용 완료 후에도 동일하게 떠서 확인해 봤더니 글 작성 시 세 번째가 아니라 첫 번째(본문 폭 맞춤) 으로 해줘야 하는 것이였다. 기존 이미지들은 모두 세 번째 (가운데 정렬)로 되어 있었다.첫 첫째(본문 폭 맞춤)으로 설정해주니 아래와 같이 이미지가 콘텐츠 영역 밖으로 나가지 않았다. + 다른 이미지들은 모두 다 세 번째로 되어있는데 다 바꾸기에는 힘들 것 같다.. 이제부터라도 잘 적용하기..
하고자 하는 동작은 테이블이 있다면 해당 테이블의 모든 데이터를 삭제하는 것이다.아래와 같이 코틀린으로 테스트 코드를 작성했다.private fun resetDatabase() { val tables = jdbcTemplate.queryForList("SHOW TABLES", String::class.java) tables.forEach { table -> jdbcTemplate.execute("TRUNCATE TABLE $table") }} 아래와 같은 오류가 발생했다. 구글링을 해보니 테이블 간 연관관계가 맺어져 있어서 오류가 나는 것이였다. 내 프로젝트에서 연관관계는 다음과 같이 작성되어 있다.Member 와 Note : 일대다Member 와 Quiz : 일대다Not..
코틀린으로 만들어진 스프링부트 프로젝트에서 jacoco를 추가하는 방법을 알아보자. 1. JaCoCo란?JaCoCo(Java Code Coverage)는 자바 프로그램의 코드 커버리지를 측정하기 위한 오픈 소스 도구이다. 코드 커버리지는 테스트가 코드의 몇 퍼센트를 실행하는지를 측정하는 지표이다. JaCoco로 다음과 같은 작업을 수행할 수 있다. 코드 커버리지 분석JaCoCo는 어떤 코드가 테스트되었는지, 어떤 코드가 테스트되지 않았는지를 보여준다. 이를 통해 테스트가 부족한 부분을 찾아낼 수 있다. 리포트 생성JaCoCo는 HTML, XML, CSV 등 다양한 형식의 리포트를 생성하여 커버리지 결과를 시각적으로 제공한다. CI/CD 통합JaCoCo는 Jenkins, GitLab CI/CD 등 다양..
프로젝트를 진행하며, 이때까지 jar 파일을 로컬에서 빌드하고 scp를 이용하여 jar 파일을 배포 서버에 올리고 nohup java -jar jar파일명.jar & 명령어로 배포를 진행하였다. 하지만.. 이렇게 해서는 안된다는 것을 알고 있었기에, 이번에는 CI/CD 까지는 아니더라도 (지식이 부족해서...........) 다음과 같은 목표를 가지게 되었다. 우분투에 깃 원격저장소를 연결하고 pull 받은 후 script를 사용하여 기존에 돌아가던 jar 파일을 멈추고 pull 받은 상태의 프로젝트를 새로 빌드 후 실행시키는 것! 크게 깃 설치 및 레포 연결, 쉘 스크립트 부분으로 나눌 수 있다. 01. Ubuntu에 Git 설치 1. 깃 설치 sudo apt install git 2. 레포를 저장할 ..
요구사항 BaseEnetity 클래스의 createdAt 필드와 lastModifiedAt 필드를 자동화 하는 것! 모든 테이블에 공통으로 들어가는 필드인 createdAt과 lastModifiedAt 필드를 다음과 같이 BaseEntity에 작성했다. @Getter @MappedSuperclass public abstract class BaseEntity { @Column(name = "created_at") private LocalDateTime createdAt; @Column(name = "last_modified_at") private LocalDateTime lastModifiedAt; } 그리고 이 필드들이 다른 테이블에 들어갈 수 있게 아래와 같이 작성했다. // 상위 어노테이션 생략 (e..
요구사항 지난번에는 ConstraintViolationException이 발생했을 때 응답을 커스터마이징 했다. 하지만 Exception은 하나의 애플리케이션에서 여러 개가 발생할 수 있다. 이 때 마다 응답 형식이 다르면 일관성이 없어보일 수 있지 않을까? 라는 생각을 했다. 그래서 이번에는 Exception에 대한 응답 형식을 만들고, 해당 형식에 맞게 응답을 반환하는 것을 구현하고자 한다. 구현 먼저, global 패키지의 exception 패키지에 enum 타입인 ErrorCode를 작성한다. ErrorCode에는 세 개의 속성이 있는데, code는 오류 코드를 식별하는 문자열로, message는 응답에 포함되는 오류 메시지, status는 HTTP 응답에서 사용될 상태 코드이다. package ..