전체 글

서버는 꺼지지 않아요
문제 상황 엔티티의 속성을 수정, 저장 후 수정사항이 반영되었는지 확인하기 위해 재조회할 때 변경 내용이 반영되지 않은 채로 데이터가 조회되는 상황이 발생했다. 보다 구체적을 설명하면, 엔티티를 Soft delete하고 난 후 Repository를 통해 다시 해당 객체를 조회했을 때, 조회가 되지 않도록 @Where 처리를 해놓았으나, 실제론 해당 데이터가 여전히 조회됐다. // Book 엔티티 @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) @Where(clause = "state != 'DELETED'") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDEN..
문제 상황 스프링 + JPA에 MySQL을 연결해 사용하는 상황에서 “Group”이라는 엔티티를 정의한 후, yml 파일의 jpa.hibernate.ddl-auto 설정을 create로 하여 엔티티 정보에 따라 테이블을 jpa가 자동으로 생성하도록 처리해주었다. spring: jpa: hibernate: ddl-auto: create # 테이블 자동 생성 database-platform: org.hibernate.dialect.MySQL5InnoDBDialect database: mysql 하지만 서버를 켰을 때, SQL syntax error로 인해 “group” 테이블을 생성하는데 실패했다는 메시지를 뿜으며 테이블이 제대로 생성되지 않았다. org.hibernate.tool.schema.spi.Com..
· 웹/Spring
Mock에 대한 이해 Spring에서는 DI 컨테이너에서 객체들 간의 의존성을 자동으로 관리해주기 때문에, 개발자는 소스 코드 상에서 의존성 주입에 대해 크게 신경쓰지 않고 개발할 수 있다. 하지만, 이렇게 작성한 소스 코드를 단위 테스트하는 과정에서 객체들 간 맺어진 의존성은 객체들이 서로 영향을 끼치도록 하여 테스트에서 각 객체들 간의 독립성을 해치고 테스트 코드의 신뢰성을 떨어트릴 수 있다. @RequiredArgsConstructor public class BookService { private final BookRepository bookRepository; public List getBooksUnderPrice(int price) { List allBooks = bookRepository.fi..
22년 2월을 마지막으로 무려 다섯 달만에 적는 글이 되겠다. 다섯 달 동안 쓰고 싶은게 없는 것도 아니었지만, 바쁘다는 핑계 + 하나를 쓰더라도 좀 제대로 쓰고 싶다는 욕심에 차일피일 미룬 끝에 어느새 시간이 이렇게나 빨리 흘렀다. 앞으론 자주까진 아니어도 종종 영양가 있는 글을 쓰겠다고 다짐은 하지만, 아마 다음 글은 22년 하반기 회고록일지도 모르겠다. 1. SSAFY 7기 합격 ❗️ 21년이 거의 끝나갈 때쯤 필기테스트 - 면접을 거쳐 최종합격하였고, 22년부터 본격적으로 활동을 했었다. 사실 합격하고 합격수기를 나름 적어보려고 했었는데, 이 또한 어영부영 미루다가 결국엔 쓰지 못했다. 내가 듣기론 내 다음 기수(8기)부터 필기 테스트가 살짝 바꼈다고 들었는데, 더욱이 내 수기가 다른 분들에게 큰..
문제 (링크) https://www.acmicpc.net/problem/1774 1774번: 우주신과의 교감 (1,1) (3,1) (2,3) (4,3) 이렇게 우주신들과 황선자씨의 좌표가 주어졌고 1번하고 4번이 연결되어 있다. 그렇다면 1번하고 2번을 잇는 통로를 만들고 3번하고 4번을 잇는 통로를 만들면 신들과 선자씨끼 www.acmicpc.net 나의 풀이 import sys input = sys.stdin.readline def get_dist(loc1, loc2): x1, y1, x2, y2 = loc1[0], loc1[1], loc2[0], loc2[1] return ((x1 - x2) ** 2 + (y1 - y2) ** 2) ** 0.5 def find(parent, x): if x != p..
문제 (링크) https://www.acmicpc.net/problem/1043 1043번: 거짓말 지민이는 파티에 가서 이야기 하는 것을 좋아한다. 파티에 갈 때마다, 지민이는 지민이가 가장 좋아하는 이야기를 한다. 지민이는 그 이야기를 말할 때, 있는 그대로 진실로 말하거나 엄청나게 www.acmicpc.net 나의 코드 import sys input = sys.stdin.readline def find(parent, x): if x != parent[x]: parent[x] = find(parent, parent[x]) return parent[x] # 사실을 아는 사람과 Union시, 해당 사람이 부모노드가 되도록 def union(parent, a, b, know_truth): a = find(..
카운팅 정렬, 혹은 계수 정렬은 O(n + k)의 시간복잡도를 가진 정렬이다. 여기서 다소 낯선 k는 정렬을 수행할 배열의 가장 큰 값을 의미한다. k가 단순히 상수로 취급되어 생략되지 않고 남아있는 것은 그만큼 k에 따라 수행시간에 영향을 미치기 때문이다. 만약 k가 n보다 작다면 정렬의 수행시간은 O(n)이 되겠지만, 무한대로 크다면 정렬의 수행시간도 무한대가 된다. 작동 방식 1. 배열을 이용한 방식 계수 정렬은 counting이라는 말 답게 배열에 존재하는 수의 개수를 세어주고, 이 정보를 바탕으로 정렬을 수행한다. 그리고 여기서 수와 수의 개수는 배열 혹은 딕셔너리의 인덱스와 해당 값을 통해서 기록할 수 있다. 먼저 배열을 통한 계수 정렬은 누적합의 개념을 적용하여 구현할 수 있다. 배열을 이용..
· 프로젝트
반려동물 SNS 우쭈쭈 프로젝트를 마무리하며 쓰는 회고록 꽤 다사다난했던 프로젝트였다. 생각했던 것보다 작업 시간이 길어지기도 했고, 처음 아이디어 구상했을 때 생각했던 것보다 쉽지도 않았다. 사실, 이전 스타트업에서 근무할 때 노드를 이용해 API를 짜본 경험이 있긴 했지만 당시엔 사수님께서 워낙 밥상을 잘 차려놓아주신 경우였고, 이번엔 하나부터 열까지 내 손으로 직접 만들어가야했다. 더구나, 함께 백엔드를 맡게 된 팀원도 API 제작 경험이 전무해 내가 전반적인 리드를 할 필요가 있었고, 둘 다 Django를 사용해본 경험은 있지만 DRF는 처음 사용해보는 것이어서 함께 알아가느라 꽤나 고생을 많이 했다. 그럼에도 불구하고 너무너무 빠르게 배우고 깜짝 놀랄만한 좋은 아이디어를 많이 내준 백엔드 메이트..
SeongOnion
조무래기 코딩