H E L L O    W O R L D !
...

총 방문자 수

...

[]

총 포스팅

전체 글

·알고리즘
Trie란?트라이(Trie)는 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조이다.자동완성 기능, 사전 검색 등 문자열을 탐색하는데 특화되어있는 자료구조이다. 래딕스 트리(radix tree), 접두사 트리(prefix tree), 탐색 트리(retrieval tree)라고도 불린다. 트라이(Trie)는 retrieval tree에서 나온 단어이다. 탐색은 dfs 방식으로 탐색한다.트라이의 장단점트라이가 무엇인지 알아봤으니, 장단점에 대해 알아보자.장점이름처럼 탐색, 즉 문자열 검색을 빠르게 한다. 문자열 탐색을 할 때, 하나하나씩 전부 비교하면서 탐색을 하는 것보다 시간 복잡도 측면에서 훨씬 더 효율적이다. 트라이를 이용할 경우 O(m) 여기서 m이란 문자열의 길이를 말한다.단점각 노드..
·도커
개요도커의 이미지와 컨테이너에 대해 알아보자.컨테이너컨테이너는 애플리케이션, 웹사이트, 노드서버, 애플리케이션을 실행하는 전체 환경을 포함하는 패키지이다. 컨테이너에 는 소프트웨어 실행 유닛이 존재한다. 이 유닛을 우리가 실행시키는 것이다. 도커로 작업할 때 이미지라는 Dissolver 개념도 필요하다. 이미지는 템플릿, 컨테이너의 블루프린트가 될 것이기 때문이다.이미지이미지는 코드와 코드를 실행하는데 필요한 도구를 포함한다. 그 다음 컨테이너가 실행되어 코드를 실행한다. 이 이미지를 기반으로 여러 컨테이너를 만들 수 있다. 즉, 이미지는 모든 설정 명령과 모든 코드 모든 환경이 포함된 공유 가능한 패키지이다. 컨테이너는 이미지의 구체적인 실행 인스턴스이다. 우리는 이미지를 기반으로 하는 컨테이너를 실행..
·도커
도커란?도커는 컨테이너를 생성하고 관리하는 도구입니다. 소프트웨어에서의 컨테이너란 표준화된 소프트웨어 유닛을 말합니다. 여기에는 코드 패키지, 해당 코드를 실행하는데 필요한 종속성 도구가 포함됩니다. 도커는 항상 동일한 동작과 결과를 제공하는 이점이 있습니다.도커는 실제 컨테이너와 동일한 개념입니다.표준화된 컨테이너를 가지고 있다.다양한 상품을 넣을 수 있다.그 후에는 자체적으로 보관 및 격리, 즉 컨테이너의 상품은 다른 컨테이너의 상품과 섞이지 않는다.냉장이 필요한 경우, 컨테이너에 내장할 수 있다.컨테이너는 스탠드 얼론(stand alone)으로 동작합니다. 컨테이너를 처리할 수 있는 모든 선박이나 트럭에 실을 수 있고, 동일한 환경에서 동일한 애플리케이션을 실행할 수 있습니다. 도커는 이러한 컨테이..
·Spring
정의영속성 컨텍스트란 엔티티를 영구 저장하는 환경을 말한다.상태영속성 컨텍스트의 상태는 비영속, 영속, 준영속, 삭제 네 가지가 있다.비영속영속성 컨텍스트와 전혀 관계가 없는 상태Member member = new Member(); member.setName("이름");영속영속성 컨텍스트에 관리되는 상태em.getTransaction().begin() // em: EntityManagerMember member = new Member();member.setName("이름");em.persit(member); // 이 때 영속성 컨텍스트의 1차 캐시에 저장된다.준영속영속성 컨텍스트에 저장되었다가 분리된 상태Member member = new Member();member.setName("이름");em.per..
·Spring
개요준영속 엔티티를 수정하는 2가지 방법이 있다. 바로 변경 감지(dirty-checking) 기능과 병합(merge)가 있다. 그 둘이 차이를 이해하고 어떤 것을 사용해야 할지 알아보자.준영속 엔티티준영속 엔티티란, 영속성 컨텍스트가 더이상 관리하지 않는 엔티티를 뜻한다. 임의로 만들어낸 엔티티도 기존 식별자를 가지고 있으면 준영속 엔티티로 볼 수 있다.변경 감지(Dirty-Checking) 기능 사용@Transactionalvoid update(Item itemParam) { // itemParam: 파라미터로 넘어온 준영속 상태의 엔티티Item findItem = em.find(Item.class, itemParam.getId()); // 같은 엔티티를 조회한다. em: EntityManagerf..
·부트캠프/Dev
토큰 유효성 검사jwt 토큰에 유효성에 대해 예외처리를 해주었다.한가지 생각해야할 것은 필터 단계는 디스패쳐 서블릿 보다 앞에 있기 때문에 RestControllerAdvice나 ControllerAdvice로 예외 처리가 안된다. 여기서 생각해본 것은 예외가 발생한다면 HttpServletResponse에 예외 메세지와 HttpStatus를 반환하고 다음 필터로 넘어가지 않는 방식이 떠올라서 이렇게 구현하였다.  검증 구현부if (StringUtils.hasText(tokenValue)) { // 토큰이 존재하면 검증 시작 // JWT 토큰 substring String token = jwtUtil.substringToken(tokenValue); ErrorInfo errorInfo =..
·트러블 슈팅
문제일정에 있는 댓글을 삭제할 때 댓글을 삭제해도 삭제쿼리가 안나와서 DB에 반영이 안되었다.삭제 로직 @Transactional(readOnly = false) public void delete(Long scheduleId, Long commentId) { Schedule schedule = validateScheduleId(scheduleId); Comment comment = getComment(commentId); validateCommentIdInSchedule(schedule, comment); commentRepository.delete(comment); }해결찾아본 결과, 조회를 한 상태(영속화)에서 delete를 해버리면 ..
·JAVA
개요Window 기준으로 작성되었습니다. 협업할때 코드 포맷이 다르면 깔끔하지 않을 것이다. 이를 해결하기 위해 인텔리제이의 코드 포맷을 구글에서 제공하는 코드 포맷으로 통일 시켜보자! 기본 설정다운로드 주소먼저 위 주소에서 xml파일을 다운로드를 해줍니다.File -> Settings로 설정창에 들어가줍니다.Editor -> Code Style -> Java를 눌러줍니다. 톱니바퀴 아이콘을 눌러 Import Scheme -> IntelliJ IDEA code style XML을 눌러 다운로드 한 파일을 임포트 해줍니다.이제 Scheme에서 GoogleStyle 을 선택해줍니다.이제 아래를 보면Tabs and Indents 탭에서Tab size와 Indent사이즈를 4로 해줍니다.( 기본은 2로 되어있습..
·부트캠프/Dev
개요앞에서 설계한 api 명세서와 erd를 가지고 개인 과제 구현을 해보자.  api 명세서는 postman으로 다시 만들었다.스케쥴매니져Service서비스는 Controller에서 데이터를 받고 DB에서 데이터를 가져와서 가공 후 Controller에게 전달해주는 역할을 담당하고 있습니다.package com.sparta.springasignment.schedule.service;import com.sparta.springasignment.common.exception.InvalidIdException;import com.sparta.springasignment.common.exception.MissmatchPasswordException;import com.sparta.springasignment.s..
·부트캠프/Dev
개요앞에서 설계한 api 명세서와 erd를 가지고 개인 과제 구현을 해보자. api 명세서는 postman으로 다시 만들었다.스케쥴매니져패키지패키지 구조는 도메인 기준으로 만들었다. 원래 처음에는 service가 있다고 치면 안에 schedule서비스 manager서비스 이렇게 뒀는데 튜터님께 조언을 받고 변경을 하였다. 조금 더 깔끔해진 것 같다.Common에는 공용으로 사용할 익셉션, 인터페이스들을 모아두도록 하였다.Dto각 도메인별 dto를 만들어주었다. dto 종류는 두 가지로 나누었다. reqeust, responseScheduleRequestDto@AllArgsConstructor@NoArgsConstructor@Getterpublic class ScheduleRequestDto { @Not..
·트러블 슈팅
문제인텔리제이에서 commit 과 push를 해주었는데.. 깃허브 사이트에서 커밋 내역을 보니 한글이 다 깨져있었다.인텔리제이에서는 오른쪽 그림 처럼 잘 나와서 생각이 없었는데 깃허브사이트에서 확인해보니까 대참사가 벌어졌다.. 지금이라도 한글이 제대로 나오게 하기 위해 해결해주었다.해결해결은 간단하게 됐다.git config --global i18n.commitencoding "UTF-8"git config --global i18n.logoutputencoding "UTF-8"인텔리제이 터미널에서 위 두 줄을 입력해주었다.그 결과 잘나오게 됐다. 인코딩 문제였던거 같다
·부트캠프/Dev
개요이번 프로젝트는 드디어 스프링 주차에 들어갔다. 그 전 자바 공부 때 틈틈이 스프링도 공부해오던 것이 빛을 발할 때!! 이번 개인 과제는 스프링을 사용하여 CRUD 기능을 구현해보는 것이다.설계먼저 DB와, API 설계를 해보자.APIAPI 명세서는 다음과 같이 작성하였다.ERDERD는 다음과 같이 만들었다.클래스 구조 설계강의에서 layerd architecture를 배웠다. 이를 응용해서 package를 분리해 줄 것이다..repository : DB에 CRUD를 요청하는 클래스.service: Repository에 요청해서 받아온 데이터를 바탕으로 서비스 로직을 담당하는 클래스.controller: 컨트롤러controller service 간 데이터는 dto를 사용, service repos..
nameless1004
Nameless