본문 바로가기

전체 글

(147)
부트캠프 81일차 후기 오늘은 아침부터 모의면접을 대비해서 CS 지식을 복기했다. 그리고, 꼬리질문에 대비해서 연관된 정보도 좀 찾아보았는데, 기억해 두면 좋을 것 같은 개념이 좀 있었다. 일단 가비티 컬렉터가 작동하는 방식을 다시 훑어보았다. 가비지 컬렉터닌 이전에 정리했듯이 Mark And Sweep 방식으로 작동하는데, 이것을 좀 더 자세히 알게 되었다. JVM은 메모리를 Old 영역과 Young 영역을 나누어서 관리한다. 여기서 Young 영역의 가비지 컬렉팅을 Minor GC, Old 영역의 가비지 컬렉팅을 Major GC라 부른다. Young 영역은 3가지 영역으로 나누어지는데, 각각 Eden, Survivor 0, Survivor1라고 한다. Eden은 객체가 생성되자마자 할당되는 메모리 영역이다. 여기서 Eden..
부트캠프 80일차 후기 기존의 Thymeleaf를 활용한 HTML을 자바스크립트를 활용한 axios로 바꾸는 작업을 하였다. 지금까지 배운 Kotlin + Spring Boot가 아닌 순수 JavaScript 작업이였기 때문에, 생각보다 많은 고생을 했다. 개인적으로 HTML 구조를 선호하지 않는 입장에서, 들여쓰기 없는 HTML은 고역이다. 일단은 가장 기본적인 메인 페이지를 바꾸는데, 성공했다. 시간이 없으니 주말에도 좀 작업을 하는 것을 고려해봐야겠다. 가장 시간을 많이 소모한 오류는 매핑이 안되는 오류였다. 서버는 정상적으로 돌아감에도, 해당 경로를 가진 HTML을 매핑을 찾지 못해서 오류가 발생했다. 생각보다 기본적인 곳에서 막혀서 상당히 당황했다. 아무리 기존 프로젝트와 비교해보며 사소한 오타를 고쳐보고, 여러가지를..
부트캠프 79일차 후기 오늘은 프론트엔드 작업을 시작했다. 시작부터 고민이 많았는데, 이전 프로젝트에선 Thymeleaf를 사용했다. 그런데, 이번에 REST-API를 설계하면서, 이것을 더 유용하게 사용할 만한 다른 템플릿 엔진이 있을지 고민했고 Thymeleaf 대신 Vue나 React 사용을 고민해 보았다. 일단 러닝커브가 있다는 React는 제외하고 Vue와 저울질을 해보았다. 일단 Vue를 어떻게 사용하는지가 궁금해졌고, Vue 설정을 검색해서 차근차근 따라해보았다. 하지만 처음이라서 막히는 부분이 있었고, 결국엔 하루의 대부분을 Vue를 설정하는데 시간을 보내게 되었다. 예를 들어서 vue가 작동하지 않았었는데, create를 하지 않아서 생긴 문제였다. create를 했음에도 정상작동이 안 되었는데, config ..
부트캠프 78일차 후기 오늘 프로젝트 진도는 많이 나가지 않았다. 어제 AOP를 활용한 권한 확인을 수행하기 위해서, 시간을 많이 소모해버렸기에, 가야할 길이 많음에도 많은 것을 하지 못한것이 아쉽다. 하지만, 여러가지로 배운 것은 있다. 일단 어제는 pointcut을 execution 문법을 사용할려했었는데, 이것 때문에, 메소드 이름을 바꾸는 것이 좀 번거롭게 느껴졌다. 그래서 @Annotation을 활용해서 AOP를 적용하기로 결심했다. 우선 어노테이션을 정의하고, @Inherited @Retention(AnnotationRetention.RUNTIME) @Target(AnnotationTarget.FUNCTION) annotation class CheckEntityCreator .@Aspect로 정의한 클래스 안에 어드..
부트캠프 77일차 후기 오늘로 이전 프로젝트에 있던 기능들을 하나를 제외하고 다 옮겼다. 그 하나도 프론트엔드가 구현이 되고 나면 추가할 예정이다. 어느정도 구현을 마치고, 튜터님께 코드 리뷰를 요청하였다. 그런데, 실수로 pull request가 아닌 바로 push를 하는 바람에 튜터님께 괜히 민폐를 끼치게 되었다. 다음에는 pull request를 적극적으로 사용하자. 튜터님께 받은 조언은 여러가지가 있는데, 사소한 실수 몇가지 지적해주셨고, 특정 엔티티의 ID 값이 Long이 아닌 String인 점을 지적해주셨다. 다른 엔티티들언 전부 Long인데, 이것만 String이라서 혼동되니까, ID를 Long으로 수정을 권고하셨다. 내가 테이블 정규화를 둘러보면서, 유니크한 칼럼을 id 외로 두는 것이 꺼려져서 이렇게 두었었는데..
부트캠프 76일차 후기 그동안 해결책이 떠오르지 않았던 문제를 드디어 풀었다. 골드 상위 DP 문제 였는데, 아이디어를 살짝만 수정하면 풀 수 있는 문제였음에도 지금까지 끙끙되었던게 허무할 지경이다. 그래서 이 문제에 대해 간단하게 정리해보고자 한다. https://www.acmicpc.net/problem/1513 1513번: 경로 찾기 첫째 줄에 0개 방문했을 때, 1개 방문했을 때, ..., C개 방문했을 때 총 경로의 개수를 한 줄에 공백을 사이에 두고 출력한다. 경로의 개수는 1,000,007로 나눈 나머지를 출력한다. www.acmicpc.net 아이디어 자체는 금방 떠올렸다. 문제 자체는 DP 문제이고, 좌표가 50 이하의 자연수이니까, 이것을 dp에 사용할 수 있을 것이다. 그리고 오락실에 방문한 수 또한 50이..
부트캠프 75일차 후기 오늘은 약간의 삽질을 하였다. 나는 관련 기능은 하나의 클래스에서 거의 다 부담해야한다고 생각한다. 그래서 눈에 거슬리는 코드가 있었다. 바로, RepositoryUtil이란 내가 만들 Util관련 코드인데, 이게 좀 떨어져보인다는 느낌이 들었다. 그래서 기존에 쓰던 JPARepository를 상속 받은 인터페이스를 하나 만들어서 그 안에 RepositoryUtil이 사용하는 코드를 넣는 것이다. 나는 아이디어를 떠올리고, 한 번 시도를 하였다. interface CustomRepository: JpaRepository { fun getValidatedEntity(entityId: ID): T { return findByIdOrNull(entityId) ?: throw ModelNotFoundExcept..
부트캠프 74일차 후기 어제에 이어서, 계속 개인 프로젝트를 Kotlin으로 옮기는 작업을 시작했다. 분명, 단순히 옮기는 작업이라서 시간이 오래 걸리지 않을 것이라 예측했는데, 원본이 생각보다 안 좋은 점이 계속 보여서 이것을 어떻게 수정을 해야할 지 고민하고, 추가할 부분이 없을지 고민하느라, 생각 외로 시간이 많이 소모되는 것 같다. 일단은, 이전 프로젝트에서 QueryDSL을 통한 검색과 페이징을 제외한 주요 기능은 거의 다 옮겼다, 조회수, 좋아요 같은 추가 기능도 옮겨야하는데 이 부분은 수정이 많이 필요할 것 같다. 이전 프로젝트에서는 각각 Long 타입과 Set을 활용해서 구현을 했는데, 이러면, 조회수가 중복이 되거나 동시성이 문제가 발생(다만 중요하진 않다), 하고, 좋아요의 경우 Set을 생으로 사용했는데, ..