본문 바로가기

전체 글43

Docker 란 1. 도커란? 도커는 컨테이너를 관리하고 생성하기 위한 도구이다. 컨테이너를 사용하는 이유 : 컨테이너란 소프트웨어 개발에서 컨테이너는 표준화된 소프트웨어 유닛이다. 이는 기본적으로 코드 패키지이며 해당 코드를 실행하는데 필요한 종속성과 도구가 포함되어 있다.(컨테이너에는 애플리케이션 소스 코드 뿐만 아니라 코드를 실행하는데 필요한 기타 도구가 있을 것이다.) 로컬 환경이 개발자마다 모두 같지 않기 때문에 프로젝트를 실행할 때마다 프로젝트에 맞춰 버전 관리를 해줘야한다. 하지만 컨테이너를 사용한다면 컨테이너 안에 실행에 필요한 도구가 모두 포함되어 있기 때문에 개발자는 프로젝트를 실행하는 개발환경을 일일이 맞출 필요가 없다. (버전 관리가 편하다) 도커를 사용한다면 도커가 실행되는 모든 곳에서 실행 환경.. 2022. 9. 16.
Querydsl 동적 정렬 Querydsl로 Paging 처리하는 쿼리에서 정렬을 하기 위해선 스프링에서 지원하는 Sort 객체를 사용할 수 없기 때문에 Querydsl에서 지원해 주는 OrderSpecifier 객체를 사용해야 한다. - 예시) 사용자가 '최신순', '조회순', "좋아요순'을 선택하여 게시글을 조회할 수 있도록 동적 쿼리를 작성해야 한다. 1. 프론트로부터 쿼리스트링으로 sortType을 전달 받는다. 2. 전달 받은 sortType 으로 Sort 객체와 Pageable 객체를 생성하여 Querydsl Repository단으로 넘긴다. 3. 아래와 같이 서비스단으로부터 넘겨 받은 Pageable 객체를 이용하여 OrderSpecifier 객체를 생성해준다. switch 구문으로 원하는 정렬 정보를 갖는 Order.. 2022. 9. 8.
Linux 명령어, EC2 배포 ls: 내 위치의 모든 파일을 보여준다. pwd: 내 위치(폴더의 경로)를 알려준다. mkdir: 내 위치 아래에 폴더를 하나 만든다. cd [갈 곳]: 나를 [갈 곳] 폴더로 이동시킨다. cd .. : 나를 상위 폴더로 이동시킨다. cp -r [복사할 것] [붙여넣기 할 것]: 복사 붙여넣기 rm -rf [지울 것]: 강제로 지우기. 이 명령어로 지우면 복구가 안되니 조심하세요! sudo [실행 할 명령어]: 명령어를 관리자 권한으로 실행한다. sudo su: 관리가 권한으로 들어간다. (나올때는 exit으로 나옴) 배포 깃설치 sudo yum install -y git (잘 설치되었는지 확인 git --version) -> 자바 설치 sudo amazon-linux-extras install java.. 2022. 5. 15.
SSE 프로토콜을 활용한 채팅서버 netty 서버 사용 싱글 스레드 비동기 서버 톰캣도 비동기서버를 지원하나 기본적으로 스프링은 netty를 사용함. -몽고디비(NoSQL) 컬렉션 (json 형식) - 리스트 중복 허용 - 한번에 select 가능 - 조회시 조인 필요 x 데이터의 일관성을 유지하기 힘듦. -스프링 5.0 (Netty 서버, NoSQL 사용) 대기열에 넣어놓고 스레드 하나가 일함, 컨텍스트 스위칭 x 비동기 처리 가능 중요: 비동기 서버 → 비동기 DB 이여야함. 비동기 DB가 아니라면 a요청이 3초가 걸린다면 DB 또한 3초동안 다른 요청을 받지 못함. 따라서 DB 또한 비동기 DB(Mongo DB)여야함. 기존서블릿 기반 - (스레드 여러개 사용) 독립적인 요청 가능 요청a가 response가 완료되지 않아도 대기시간.. 2022. 5. 15.
fetch 조인 페치 조인은 JPQL에서 성능 최적화를 위해 제공하는 기능으로 sql에서 지원하는 조인 종류가 아니다. 연관된 엔티티나 컬렉션을 sql 한번에 함께 조회하는 기능으로 사실상 즉시로딩의 기능과 같기 때문에 도메인 설계 단계에서 대부분 지연로딩을 사용하는 실무에서 자주 사용한다. → 도메인 설계시 대부분의 연관관계를 fetchType = Lazy 로 설정 후(비즈니스 로직에 따라 다름) 조회 쿼리시 'fetch join' 사용 → n+1 문제 해결 *예시 [JPQL] select m from Member m join fetch m.team; [SQL] select M.*, T.* from member m inner join team t on m.team_id = t.id → 회원을 조회하면서 연관된 팀도 함.. 2022. 5. 15.
Buffer buffer → 임시 저장 공간 Stream → 수도꼭지 생각 → 물의 흐름(Stream) → 1byte(8bit) BufferredReader 란? InputStreamReader를 사용하여 긴 문자를 받을 수 있지만 미리 길이를 알고 있어야만 배열의 크기를 정할 수 있기 때문에 가변적으로 문자를 받을 순 없다는 단점이 존재한다. → Buffer 사용 !! (BufferedReader) → 모든 통신은 Buffer로 들어옴. 숫자(10진수) → 부호화 (문자) 문자를 가변적으로 받을 수 있음. → 배열의 공간 낭비가 없다. 양쪽 버퍼의 크기가 같은 임시 저장소가 존재한다. 버퍼크기 만큼 문자를 flush 컴퓨터는 버퍼 임시 저장소에서 readLine() 을 통해 String 에 저장 컴퓨터 버퍼 임시 .. 2022. 5. 5.