-
백엔드 문제점과 이슈 질문에 대해-12학년/이모저모 2023. 9. 11. 13:16
팀 크레이자알파카에서 올린 채용공고 속엔 아래와 같은 질문을 이력서에 포함하게 되어있었다.
1. A, B 두 사람이 각각의 Feature를 개발해서 develop branch에 병합을 한 상황입니다. 그런데 A가 작업한 Feature만 배포를 하기로 했습니다. 이 때 올바른 Git 사용방식은 무엇인가요?2. RDB 또는 NoSQL을 사용하던 도중 불편함을 느꼈던 경험과 개선 방안에 대해 알려주세요.
3. ALB+Auto Scaling Group+EC2+Fastapi 로 구성된 서버를 Serverless로 전환할 때의 고려사항이 무엇인가요?︎
보자마자 엥 이게먼데… 난 이제 이유식먹는 개발자였음을 다시한번 깨달았구,,,
찾아보면서 생각해보기로 했다.1번질문
-----------------------------------
우선, 질문을 보고 처음 든 생각은 feature가 뭔데... 였다.
feature가 자기가 개발한 브랜치라면, 병합한 걸 돌려서 A가 작업한 것 만 하거나 git cherry 쓰기? 라고 생각함.
한편으론 그냥 A가 브랜치 메인으로 새로 파서 그거 걍 올리면 안됨...? 싶음.
우선 Git Branch 종류가 있다고 한다. 5가지로 메인브랜치 (master , develop) 와 보조 브랜치 (feature , release , hotfix ) 라고함.https://gmlwjd9405.github.io/2018/05/11/types-of-git-branch.html
[GitHub] Git 브랜치의 종류 및 사용법 (5가지) - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
이 문서를 보면 확실히 이해할 수 있다.
master branch가 현재 배포 버전 ( 과거 배포 이력을 볼 수 있음 )
develop branch가 다음 출시 배포 버전을 개발함 ( 안정버젼임을 확인하면 master branch와 merge )
feature branch가 기능을 개발하는 브랜치 ( 수정점이 있다면 develop을 git pull받고 개발이 완료되면 develop으로 merge )
(1. develop의 수정해야할 부분을 받아옴 / 2. 수정하기 / 3. feature branch에서 수정이 끝나면 develop과 merge / 4. feature브랜치 삭제하기)
release가 이번 출시 버전을 준비하는 브랜치 ( develop에서 일정 수준이 모이면 release로 모임. 배포가능 상태라면 마스터에 병합. 배포완료 후 디벨롭 브랜치에도 병합 )
( 1. develop에서 배포할 수준의 기능이 모이면 release 브랜치로 분기 (release에선 버그수정, 문서추가 등 기능은 건드리지 않음 ) / 2. release에서 배포 가능하게 바꾸면 master로 merge )
고로 develope(기능모음) > release(문서작업 , 추가 버그 수정) > master( 최종 배포)
hotfit branch는 출시 중 버그 긴급수정 브랜치
(1. 버그발생 > 2. master에서 hotfix 브랜치 새로 분기 > 3. 버그 수정 > 4. 다시 master에 merge , develope에도 merge)
아래 코드는 내가 나중에 보기 위한... 브랜치 생성 및 종료 명령어
feature branch 과정
// feature브랜치 새로 파는데 master가 아니라 develope에서 따와야함, 아래 예시는 로그인 피쳐만들기 git checkout -b feature/login develop // 새로운 기능 작업 수행 // develope브랜치로 이동 git checkout develop // develope브랜치에 feature/login브랜치 내용 merge // --no--ff는 새로운 커밋 객체를 만들어 develop에 merge하는데 feature브랜치에 존재하는 커밋이력을 모두 합쳐 새로운 커밋 객체를 만드는것이라 함. git merge --no--ff feature/login //피쳐 삭제 git branch -d feature/login //디벨롭 브랜치 원격 저장소에 올리기 git push origin develop
// 사실 --no-ff는 왜 쓰는 지 모르겠음. 커밋이력을 모두 합친다는 말이...
// 내가 feature/login에 수정한 기능은 내 의도대로 수정할 점을 완벽하게 고쳤는데 커밋이력을 모두합쳐야하나...?
release branch 과정
//마찬가지 develop에서 따옴. master아님 //release이름 국룰은 release-x.x.xx이런 느낌이래요 git checkout -b release-1.2 develop //배포 사이클 시작 //release에서 배포 가능한 상태가 됨 > 마스터로 이동 git checkout master //master브랜치에 release-1.2 branch merge git merge --no-ff release-1.2 //병합한 커밋에 release버전 태그 부여 git tag -a 1.2 //develop에도 마스터 버젼 따오기 git checkout develop git merge --no-ff release-1.2 git branch -d release-1.2
// 태그를 붙이는 이유는 커밋을 참조하기 쉽도록하려고...단순..
hotfix branch 과정
//유일하게 마스터에서 가져올 수 있다 git checkout -b hotfix-1.2.1 master //수정 git checkout master git merge --no-ff hotfix-1.2.1 git tag -a 1.2.1 //develop에도 적용 git checkout develop git merge --no-ff hotifx-1.2.1
보아하니 hotfix말고는
develop에서 가져오기 > 기능추가와 수정 > develop에 합치기 > 어느정도의 기능이 develop에 모임 >
develop에서 가져오기 release생성 > release에선 버그와 문서정도의 간단작업 > master에 병합 > 배포
hotfix는 master에서 hotfix-x.x.x.. 로 분기 > 버그 고치기 > master와 merge
정도인 듯
근데 위의 과정은... git-flow이고 간단한 fithub-flow가 있는데 이건 걍 master언제나 배포가능 > 새로운 프로젝트는 master 기반으로 별도의 브랜치에서 작업 > 로컬에서 커밋, 원격에 push. > 승인받으면 master에 병합ㅇㅇ
정도가 git branch의 정석...? 인 듯. 암튼 feature브랜치가 알았으니 다시 문제로 돌아오자면,
1. A, B 두 사람이 각각의 Feature를 개발해서 develop branch에 병합을 한 상황입니다. 그런데 A가 작업한 Feature만 배포를 하기로 했습니다. 이 때 올바른 Git 사용방식은 무엇인가요?
열심히 머리를 굴려봤지만,,, 그냥 머지기록 확인해서 b가 병합하기 전으로 돌아감>a가 먼저 병합했으면 그대로 배포하고 아니면 다시 a가 develop에 push함... 밖에 떠오르지 않음...
gpt에게 물어보니, tag를 사용하라고 한다.
a작업 feature branch로 이동 > 여기서 tag 생성(git tag v1.0.0) > 태그 푸쉬 > 디벨롭에서 머지 하라고 함
아니면 내 생각과 비슷하게 log확인 > b전으로 옮기기...라네요
더 좋은 수가있으면 추가하겠지만...이거로 해도 상관은 없지않나...싶다...
2번질문
-----------------------------------
2. RDB 또는 NoSQL을 사용하던 도중 불편함을 느꼈던 경험과 개선 방안에 대해 알려주세요.
RDB라는게 그..relation data base? 맞겠죠? 이거랑 noSQL은 더 써보고 추가해봄.
우선 RDB = Relational DataBaseㅇㅇ 디게 많이 본 개념임
각 테이블마다 pk가 있고 fk를 통해 테이블 간 관계를 볼 수 있음.
wwg할 때 erd를 한 번 짜보긴 했음.
첨엔 저렇게 하나하나 나누어서 나중에 쓰기 쉽게 해야지! 하면서 하나하나...~ 나눴다.
근데, start_location이니.. TIME이니... 다 기억하기도 쉽지 않았고, 막~ 코드를 짜다보니 우째 나누는게 더 어려워서
근데, start_location이니.. TIME이니... 다 기억하기도 쉽지 않았고, 막~ 코드를 짜다보니 우째 나누는게 더 어려워서
간단하게 바뀌었음. 막 하다보니 < 이부분이, 데이터를 받아오는 과정이 다 ~ JSON으로 되어있어서 세세하게 나눌 필요가 없었으며, JSON을 JS객체로 바꾸어서 JSON내부의 객체들도 접근이 가능하니 필요가 없었음!!!
암튼 진짜 쪼금 ~~ 바다가 있다면 나뭇잎에 고인 이슬만큼 써본 경험으로썬... 데이터 접근이 느렸다 ?정도 ㅇㅇ, 그리고 하나하나 정의를 해야한 다는 점, 마이그레이션을(구조변경시에) 맨~날 해줘야한다는 점에서 구렸음. noSQL방식( noSQL db를 쓴 게 아님 ) 을 사용했을 땐, 만든 서비스에선 불편한 점 없었음. 근데 중복값들어가면 알지못하기 때문에... 구릴듯...?
질문의도가 먼지 모르겠음 아직은... RDB = 관계형 , noSQL = 비 관계형 데이터베이스 ... 그럼 두개 개념이 이분법으로 딱! 나뉘는데, 그냥 db를 사용하던 중 어려운걸 물어본건가...싶?음
오 찾아보니까 비슷한 거 ? 같음 !! 키벨류없이 .... JSON비슷하게...... 개인적으로 noSQL를 더 좋아지려고 합니다.
3번질문
------------------------------------
3. ALB+Auto Scaling Group+EC2+Fastapi 로 구성된 서버를 Serverless로 전환할 때의 고려사항이 무엇인가요?︎
이것두 더 알아보고 추가해봄. 일단 아는건 EC2 ㅋㅋ 나머진 암것도 모름
우선 ALB....다음주에 추가하겠삼.............ㅎ 우째 AWS비기너 자격증딴다는 애가 아무것도 모르노....내다버린 세달이다.
728x90'2학년 > 이모저모' 카테고리의 다른 글
js코드를 짤 때( 디자인패턴 초입) (0) 2023.09.21 [css] Input , Select Box 디자인 수정법 (0) 2023.09.19 JWT, JSON (0) 2023.06.29 콜백 (0) 2023.05.02 인증과 식별, 계정관리, OTP (1) 2023.05.02