본문 바로가기
  • 개발하는 곰돌이

전체 글218

[회고록] 조금 늦은 입사 2년차 돌아보기 목차요즘 좀 다사다난해서 회고록 쓰는걸 까먹고 있었는데 벌써 2년차가 지났었습니다. 지난 1년동안은 또 무슨 일이 있었는지 돌아봐야겠습니다.회사 생활이번 1년동안은 개발 업무보다는 운영 위주의 업무가 많았던거 같습니다. 운영 업무 특성상 예상 못했던 이슈들이 예상 못한 시간에 펑펑 터지는 경우가 많은데다 빠르게 조치해야 해서 여러모로 피곤한 경우가 많았습니다. 가장 힘들었던 상황은 중계 서비스 운영 업무를 하다보니 양쪽 사이에 낀 채로 이슈 상황을 전달하기만 하고 정작 이슈를 직접 해결하지는 못하면서 기다리기만 해야 하는 상황이었습니다. 한쪽에서는 계속 수정 중이라고 하고 반대쪽에서는 언제 고쳐지는지 계속 문의가 들어오는게 아주 난감했죠.서비스 서버에 적용되어 있는 인증서를 교체해보기도 했습니다. 문제는.. 2024. 11. 5.
백준 1000문제 달성(feat. solved.ac 랜덤 마라톤) 대략 3~4달쯤 전에 solved.ac 프로필 배경 리스트를 구경하다가 랜덤 마라톤이라는게 생겼다는걸 알게 되었습니다. 일주일마다 사용자에게 맞는 문제 8개를 저난이도부터 고난이도까지 뽑아주고 다음주 문제들의 난이도는 이번주에 뽑힌 문제 해결 퍼포먼스에 따라 올라가거나 내려가는 시스템인것 같더라구요. 1일 1커밋을 하는 겸해서 1일 1백준을 푸는동안 어떤 문제를 풀지 고르는게 상당히 귀찮았는데 그걸 대신 해준다는 점에서 상당히 괜찮은 시스템이라고 생각합니다.랜덤 마라톤은 solved.ac 로그인 후 솔브닥 로고를 눌러 메인 페이지로 이동하면 진행할 수 있습니다!그렇게 거의 매일 랜덤 마라톤 문제를 풀다보니 랜덤 마라톤 문제만 100문제 넘게 풀게 되었고 랜덤마라톤 배지도 전부 따게 됐네요. 겸사겸사 오늘.. 2024. 10. 22.
[Kotlin] 백준 30704 : 정사각형 연결하기 문제 링크 : https://www.acmicpc.net/problem/30704문제 해설한 변의 길이가 1인 정사각형을 겹치지 않게 나란히 붙여서 둘레가 최소가 되는 다각형을 만들어야 합니다. 격자 형태의 공간에서 한 변의 길이가 1인 정사각형을 배치해서 도형을 만든다는 점에서 이 문제는 넓이가 \(N\)인 다각형 중에서 둘레가 가장 작은 다각형의 둘레를 구하는 것과 같다는 것을 알 수 있습니다. 우선 둘레를 구하기 전에 다각형이 정사각형 또는 직사각형이 아닌 경우에 대해 한번 보겠습니다.\(N\)이 5인 경우에는 위와 같이 정사각형들을 배치할 수 있습니다. 이 경우에 대해 둘레를 구할 때 살짝 비틀어 보면 아래와 같이 둘레가 구해지는 것을 볼 수 있습니다.직사각형에서 움푹 들어간 부분의 변을 바깥으로.. 2024. 10. 15.
[IntelliJ] Remote JVM Debug를 사용해서 서버를 원격으로 디버깅 하기 목차들어가기 전에프로젝트를 개발하다보면 테스트 코드로 검증을 했다고 하더라도 로컬 환경이나 서버가 배포될 환경에서 애플리케이션을 실행했을 때 의도대로 동작하지 않는 경우가 발생합니다. 로컬 환경이라면 그냥 IDE의 디버그 모드를 사용해서 수정이 가능하지만 여러가지 이유로 로컬에서 테스트가 불가능한 로직은 개발 서버 등의 환경에 배포를 하고 테스트를 진행하다보니 일반적인 디버그가 어렵습니다. 이 때 IDE의 Remote JVM Debug 기능을 사용하면 서버에 배포된 애플리케이션이라도 로컬 환경에서 디버그 하듯이 디버그를 진행할 수 있습니다.Remote JVM Debug의 동작 원리자바의 디버거는 실행중인 애플리케이션에 디버거가 접속하여 동작합니다. IDE를 사용하여 디버깅을 하는 경우 위 그림에서 deb.. 2024. 10. 2.
[Spring Scheduler] 서버 이중화 또는 증설 시 ShedLock을 사용하여 스케쥴러 중복 실행 방지하기 목차들어가기 전에여러가지 이유로 구동되고 있는 서버를 증설해야 하는 경우가 있습니다. 이렇게 서버가 증설되어 여러 대의 서버 인스턴스에서 동일한 서버 애플리케이션이 구동되고 있다면 스케쥴러를 통해 정해진 시간에 주기적으로 동작하는 로직은 여러 서버에서 동시에 실행되었을 때 문제가 발생할 수 있기 때문에 오직 하나의 서버에서만 스케쥴러 작업이 수행되도록 하는 것이 좋습니다. 이번 포스트에서는 오픈 소스 라이브러리인 ShedLock을 사용하여 스프링 애플리케이션의 스케쥴러가 중복으로 실행되지 않도록 방지하는 내용을 다루고자 합니다.ShedLock?ShedLock은 MongoDB, Redis, RDBMS 등의 외부 저장소를 사용하여 다른 노드나 스레드에서 동일한 스케쥴러 작업이 중복 실행되지 않도록 해주는 오.. 2024. 9. 9.
[Kotlin] 백준 31882 : 근수 문제 링크 : https://www.acmicpc.net/problem/31882문제 해설주어진 문자열에서 연속된 2로만 이뤄진 부분 문자열(이하 근수)들을 추출하여 점수를 구해야합니다. 근수들은 문자열 전체를 순회하면서 현재 숫자가 2라면 현재까지 구해진 부분 문자열에 2를 추가하고, 그 외의 경우에는 현재까지 구해진 부분 문자열을 리스트에 추가한 후 부분 문자열을 초기화하는 방법으로 구할 수 있습니다. 문자열을 모두 순회한 후 구해놓은 부분 문자열이 있다면 리스트에 추가해줍니다.for (num in s) { if (num == '2') { sb.append(2) continue } if (sb.isEmpty()) continue list.add(sb) .. 2024. 8. 22.
[Spring/Spring Boot] 파일 다운로드와 multipart/form-data 업로드 컨트롤러 메소드 테스트 코드를 작성해보자 목차들어가기 전에최근에 파일을 다운로드 받는 컨트롤러 메소드와 파일을 업로드해서 처리하는 컨트롤러 메소드를 작성하면서 해당 컨트롤러 메소드가 제대로 돌아가는지 확인하려고 테스트 코드를 작성할 일이 있었습니다. 평소에 작성하는 테스트 코드는 평범한 요청과 응답을 가지는 로직에 대한 테스트 코드 뿐이었다 보니 파일 업로드/다운로드와 관련된 테스트 코드를 작성한다는게 상당히 생소했는데 나중에 까먹지 않으려고 기록해두려고 합니다. 본문상의 코드는 모두 코틀린으로 작성되어 있긴 하지만 가장 중요한 파일 업로드나 다운로드 검증 부분은 자바도 별반 다르지 않습니다.파일 업로드 테스트일반적으로 파일을 업로드하는 로직은 MultipartFile을 사용하는 경우가 많습니다. 이를 테스트하기 위해 스프링에서는 Multipa.. 2024. 8. 14.
[Spring Data JPA] Java의 record 객체를 @EmbeddedId로 사용할 때 Could not set value of type 문제가 발생하는 경우 목차들어가기 전에자바로 프로젝트를 진행하다 보면 불변 객체를 쉽게 만들고 equals와 hashcode를 바로 만들어주면서 일반 클래스와 구분하기가 좋다는 점에서 값 객체 클래스를 만들 때는 레코드 클래스를 애용하고 있습니다. 그러다보니 엔티티 클래스에서 복합 기본키를 갖게 될 때 record 객체를 @EmbeddedId로 사용하려고 했는데 레포지토리에 엔티티를 저장하는 과정에서 오류가 발생해서 관련 내용을 정리해보려고 합니다. 레코드 클래스에 대한 내용은 이전에 어느정도 정리를 해놨습니다. [Java] Java 14부터 추가된 Record 타입과 Kotlin의 Data Class 비교목차 들어가기 전에 자바 14부터 코틀린의 Data 클래스와 유사한 Record라는 클래스가 추가되어 자바 16에서 정식.. 2024. 8. 2.