728x90
반응형

전체 글 81

[우아한 테크코스 6기 - 프리코스] 3주차 회고

Overview 우아한 테크코스 6기 프리코스 중 3주차 로또를 구현하고, 이에 대한 회고이다. Github Link 3주차를 시작하며 3주차 미션을 시작하며 리마인드한 점이 있었다. 코드를 작성할 때, 내 행동과 선택에 항상 이유가 있어야 한다는 것이다. 클래스를 분리하는 연습을 하기 전, 이번 과제에도 MVC 패턴을 적용하여 해결하려 했다. 많은 레퍼런스들이 MVC 패턴을 적용하여 프리코스의 과제를 해결했고, 나 또한 몇 차례 써보았기에 맹목적으로 사용했다. 하지만 정작 나는 MVC의 Model에 대한 정의도 제대로 못 내리는 상태였다. 코드리뷰를 하며 동료들의 코드를 보던 중, domain이라는 패키지 안에 다양한 비즈니스로직을 수행하는 클래스들을 볼 수 있었다. MVC의 Model은 찾을 수 없고..

[우아한 테크코스 6기 - 프리코스] 2주차 회고

Overview 우아한 테크코스 6기 프리코스 중 2주차 자동차 경주게임을 구현하고, 이에 대한 회고이다. Github Link 1. 설계와 개발패턴 정형화 2주차 미션에서는 1주차보다 설계에 많은 시간을 투자했다. 그렇게 리팩토링에 쏟은 시간이 상대적으로 적었고, 초반 설계에 대한 고민이 많아 처음 과제를 보고, 코드를 작성하기까지 2~3일은 걸렸다. 1주차에 비해 2주차에 추가된 조건에 가장 신경쓰이는 부분이 ‘기능단위 커밋’을 할 것이라는 조건이였다. 기능이라는 단어란 무엇일까? 영어로 function이고 이 말은 method를 지칭하는 function과도 문맥을 동일시한다. 그렇다면 커밋의 단위는 메서드의 구현인가? 그렇다면 기능 목록은 메서드 단위로 작성해야 하는가? 그것은 아니였다. 메서드 여..

준영속과 변경감지

Intro 본 포스팅에서는 준영속 엔티티를 수정하는 두 가지 방법에 대해 다룬다. 준영속 엔티티란? 엔티티의 생명주기에 따른 속성 분류는 다음과 같다. 비영속 영속성 컨텍스트와 연관이 없는 상태. 그저 생성만 된 객체를 의미한다. 영속 영속성 컨텍스트가 관리하는 객체 준영속 영속성 컨텍스트가 관리했던 객체. 즉, Database에 한번 들어갔다 나온 객체 (식별자 존재) 삭제 Database에서 삭제된 객체 위의 설명과 같이 준영속 엔티티란 영속성 컨텍스트가 더이상 관리하지 않는 객체를 의미한다. 하지만 데이터베이스에 한번 저장되었기에 식별자가 존재한다. 식별자를 이용해 임의의 새로운 객체를 생성한 경우에도 준영속 엔티티라 칭한다. 이런 준영속 엔티티의 값을 변경하는 방법에는 변경감지/병합 두 가지 방법..

Dev/Spring 2023.10.25

[우아한 테크코스 6기 - 프리코스] 1주차 회고

Overview 우아한 테크코스 6기 백엔드에 지원하게 되었다. 이번 6기는 서류를 지원하기만 하면 4주간 진행되는 프리코스에 참여할 기회를 얻게 된다. 기존에는 프리코스만 가볍게 체험해볼 생각으로 원서를 썼으나, 내게 필요한 교육과정이라는 생각이 들어 지원서도 열심히 적고, 프리코스에 임하고 있다. 본 포스팅에서는 1주차 미션 숫자 야구를 수행하는 과정과 회고를 다룬다. Github Link 미션 수행 절차 첫 주차 미션인만큼 메일과 과제 명세서를 자세히 읽어보았다. fork, git clone을 받은 후에 트러블 슈팅을 해주었다. 요구사항 분석 먼저 전체적인 flow를 작성하였다. 그리고 구현할 기능 목록을 작성했다. 0. 들어가며 처음에 숫자야구라는 주제를 보고, 친숙한 게임이기도 하고, 규칙을 모..

Git CRLF

Overview Git clone시 OS간 차이에서 발생하는 빌드 문제를 해결하는 방법을 다룬다. Issue 평범하게 자바 소스코드를 Git clone 받았다. 그리고, 정상적으로 실행이 되는지 $ ./gradlew clean test를 진행했다. 하지만 아래와 같은 오류를 만날 수 있었다. zsh: ./gradlew: bad interpreter: /bin/sh^M: no such file or directory 처음에는 단순한 오류인줄 알고, 늘 그렇듯이 로그를 바탕으로 구글링을 했다. 정보를 찾아본 결과, OS간 개행문자를 처리하는 방식이 달라서 gradlew 파일이 git clone시 변화됐음을 확인할 수 있었다. remote 파일 #!/bin/sh # # Copyright © 2015-2021 ..

Trouble Shooting 2023.10.22

docker image push to github

Intro 생성해놓은 docker image를 github package에 push하고, 이를 공유하는 방법에 대해 다룬다. Generate Token Github Settings > Developer Settings > Personal Access Token(Classic) 여기서 새로운 토큰을 만들어준다. Generate new token 원하는 이름과, repo, packages 권한을 체크한다. 그러고 완료하면 token이 생성되는데, 복사 해준다. 한번 노출되고 다시는 노출되지 않으므로 재사용할 것이라면 어딘가에 저장해두자. Docker login 생성한 토큰을 이용하여 도커에 깃허브 아이디로 로그인할 것이다. $ docker login ghcr.io -u 깃허브아이디도커 컨테이너 레지스트리 서..

Dev/Docker 2023.10.18

fastapi 배포 w/ docker

Intro 본 포스팅에서는 fastapi로 구축한 back-end server를 docker image를 통해 배포하는 방법에 대해 다룬다. Configuration Lang : python 3.11.4 Framwork : Fastapi Dir Structure 프로젝트는 python의 내장모듈인 venv를 이용하여 구축했으며, 대략적으로 아래와 같은 디렉토리 구조를 가진다. - bin - lib - src - api - database - schema - service main.py requirements requirements.txt 파일을 루트 디렉터리 (/src)에 위치시켜, 파일 빌드 시 필요한 의존성을 추가한다. uvicorn fastapi Dockerfile Dockerfile을 통해 doc..

Dev/Docker 2023.10.18

공개키 암호 시스템(1)

공개키 암호 개요 기존 대칭키 암호의 한계 기존 대칭키 암호 체계에서는 1:1 통신 마다 키가 필요하다 즉, n명 통신시에는 $\frac{n(n-1)}{2}$ 개의 키가 필요하다. 통신을 위해 항상 키를 가지고 있어야 한다. 키가 많아지면 오버헤드가 발생한다. Solution : 공개키 (비대칭키) 암호 시스템 공개키 (비대칭키) 암호 시스템 Diffie, Hellman은 1976년 발표된 논문 *"New Directions in Cryptography"* 에서 공개키 암호 시스템을 소개한다. 각 사람마다 한 쌍의 키를 보유한다. (공개키 pubkey, 개인키 secret(private) key) 공개키는 모두에게 공개되고, 개인키는 비밀로 보관한다. 공개키를 안다고 해서 이를 통해 개인키를 유추하는 것..

Security 2023.10.09

Ch04. DATABASE Design & AWS RDS Settings Practice

Ch04. DATABASE Design & AWS RDS Settings Overview AWS RDS를 통해 데이터베이스를 만든다. Datagrip을 이용하여 외부 접속한다. Create New Subnet 저번 포스팅에서 만들었던 subnet외에 새로운 subnet을 생성하여 RDS를 배치할 것이다. 기존에 만든 VPC에 새로운 subnet을 생성하자. 기존 VPC를 선택한다. 이름은 tete-subnet2로 지정해주었고, 필요한 값들을 할당한다. 추후에 생성할 서브넷 그룹을 대비해서 이미 생성해둔 서브넷의 가용영역과 다른 가용영역을 선택해준다. 생성한 subnet을 외부에서 접속 가능한 public subnet으로 만들기 위해 외부와 연결된 라우팅 테이블과 매핑한다. 서브넷 연결 편집을 클릭한다. ..

프록시 캐시와 캐시 무효화

Intro 본 포스팅에서는 프록시 캐시와 캐시 무효화에 대해 다룬다. 프록시 캐시 원(origin) 서버에 직접 접근 원 서버에 클라이언트가 직접 접근하여 리소스를 받게 되면 병목현상이 일어날 수 있다. 프록시 캐시 도입 첫 번째 요청 첫 번째 요청에는 프록시 서버를 거쳐서 원 서버로 요청이 가게 된다. 첫 요청에는 프록시 서버에 리소스가 없으므로 당연한 결과이다. 그리고 원 서버로부터 응답이 오게 되면, 캐시 서버는 이를 캐시로 저장한다. 두 번째 요청 두 번째 요청 시에는 프록시 캐시 서버가 클라이언트들에게 응답을 함으로서 더 빠른 속도로 응답할 수 있다. 이렇게 프록시 캐시 서버에서 저장할 수 있는 캐시를 public 캐시라고 한다. 반면에 클라이언트가 보유하고 있는 캐시는 private 캐시이다...

CS/Network 2023.10.07
728x90
반응형