프로덕트

아티클

전체 보기
김나임

김나임

깃.. 이랑 친해져봅시다 두둥. 탁(후회하는 내 머리 치는 소리)

image.png

안녕하세요? 파드 4기 서버 파트 활동 중인 김나임입니다. 이번에 동아리 깃 스터디에서 배운 내용과 개인 경험으로 얻은 Git 꿀팁을 공유하고자 합니다!

깃과 저의 관계는요? 음... 애증 그 자체죠.

가끔은 제가 cmd로 멋있게 Git을 다루는 모습을 보면 뿌듯하지만, 가끔은 Git이 뒤통수를 후려치는 바람에 "git undo 하는 방법"을 검색하고 있는 저를 발견하곤 합니다.. 하하

그래서! 저와 여러분을 위한 Git SOS 모먼트 가이드를 작성해 보려고 해요.


이 글이 한 사람, 혹은 한 프로젝트를 살릴 수 있지 않을까요?

그럼, 바로 고고씽

💡나.. 수정하긴했는데 뭘 수정했는지 모르겠네..

git status

를 사용하면 파일 단위로 바뀐 부분 다 알려 줍니다!

git diff

를 사용하면 파일 내에 어떤 걸 수정했는지, 한 줄 한 줄 변경사항까지 확인 가능합니다.

💡이거.. 푸쉬(push) 해도 되는건가.. 아.. 자신 없는데

푸쉬 전 상태 점검! 불안할 때 사용하세요.

git push --dry-run

" 야 깃, 아 직 push 하지는 말고 그냥 만약!!!! 지금 push 하면 어떻게 될 것 같은지만 알려줘" 하고 하는 cmd 입니다.

💡망했다 API key 올려버렸다

이전 커밋을 취소하지만, 수정된 내용은 그대로 남습니다. API key 올 실수도 깔끔히 해결!

git reset --soft HEAD~1

이 커맨드는 대충 git 에게 " 야 방금 거 그냥 없던 일로 하자~" 라고 하는 겁니다!! 저는 실제로 api key 올린 것이 있는데.. 아주 유용하게 쓴 command 입니다..

💡머지(merge) 시작을 했는데 망했네 ^^

충돌났을 때 바로 머지를 중단할 수 있는 구세주 커맨드입니다.

git merge --abort

머지 시작하고 망한 것을 감지한 그대? 그냥 빨리 abort 하시면 됩니다 ~ 이즈 괜찮아요!!!!

저도 사실 충돌 메시지를 봤는데 직접 머지 할 만 할 것 같았지만... 한 반쯤 하다가 망한것을 직감했을 때 주저 없이 사용하는 커맨드 입니다 ^^ ..

💡아.. 브렌치(branch) 여기 아닌데

브랜치를 잘못 선택해 작업했을 때 유용합니다.

git stash
git checkout <원래 사용하려 했던 브렌치 이름>
git stash pop

이번 주에 있던 상황인데요. git branch 새로운 브렌치 를 생성 후에 checkout 하는 걸 까먹고 행복하게 바꿀 거 다 바꾸면서 코딩하고 있는데 main에서 코드 실험하고 있었습니다... 그래서 이 command를 사용해서 바꾼 부분을 다시 원래 의도했던 브렌치에 적용하였습니다.. 네.. 그런 사연이 있습니다.

한 마디로 이 command들이 해주는 역할은 " 야 git 이거 잠깐 잡고 있어봐 브렌치좀 바꿀게." 하는 것입니다!!

💡?! 뭐야 다 어디 갔지 ?

작업물이 사라졌다면, 이 명령어로 과거 커밋을 찾아 복구할 수 있습니다.

git reflog 

이 상황은 사실 많이 일어나지 않습니다!! 하지만!! 저는 그 확률을 뚫고 !! 한번 경험해 봤습니다!!!

분명히 저장했는데 갑자기!!! 다 없어져서 키보드 때리고 울 뻔 했지만. git reflog 해서 내가 한 모든 commit과 actions 다 보여주었고 git checkout까지 해서 그 목 찾은 commit을 찾아서 다시 작업 할 수 있었습니다.

💡이 커밋(commit) 뭐지..?

혼자 작업할 때 커밋 메시지를 깔끔하게 수정할 수 있습니다.

git rebase -i HEAD~1 

뒤에 숫자는 원하는 대로 설정 가능~

여러분은 작업하다가 commit message들이 " . ", " 고침 " , " 진짜고침", "진짜고침아마도" 와 같은 내가 무슨 작업 했는지 모를 commit message를 쓴 적 있나요? 저는 많습니다. 그런데 생각보다 나중에 커밋 메시지마저도 중요하게 느껴질 때가 있습니다. 그래서 이 command를 써서 커밋 1 개 뒤로 해서 다시 commit의 메시지를 수정할 수가 있습니다! 그런데 rebase는 본인 repo , 에서만 사용하세요..! 팀 내 프로젝트에서는.. 금지!!

💡아 이 커밋(commit) 부터 망했다.

특정 커밋 상태로 돌아갈 수 있습니다.

git reset --hard <커밋번호>

"이때 모습 그대로 돌려놔.." 라고 깃 한테 시키는 겁니다!

💡다 모르겠고 망했다.

최후의 수단입니다. 신중히 사용하세요.

git reset --hard origin/main

이거는 최후의 수단. 이거는 마치 git 한테 " 로컬에 바꾼 거 다 그냥 잊어버리고 내 브렌티 서버에 있는거랑 똑같게 만들어줘" 입니다.. 진짜 최최최최후의 수단.

💡아.. 이거 누가 했냐

git blame <파일명> 

말 그대도 파일 수정 된 부분 누가 했는지 다 나와서 ㅋㅋㅋ 네.. 말 그대로 문제가 발생했을 때 blame 할 사람을 찾아주는 ㅎㅎ

협업 시 필수 Git Drill~

1. 작업 전 최신 상태로 만들기~

git fetch
git pull origin <브렌치이름>

지금 내가 작압히하고 있는 브렌치가 최신 상태인지 확인하기~

2. 브랜치 이름 체계화~

git checkout -b feature/<브렌치이름>

암에 feature/ 는 사실 브렌치 이름 정할때 그 브렌치의 역할 을 적어주면 좋아요!!

예시로는 feat/new feature name , fix/ @@ issue 이런 방식으로 하는걸 추천합니다!!

-> 협업 시작전 팀원들과 브첸치 이름 포멧 정하것이 좋게죠?

3. 의미 있는 커밋 메시지 작성하기~

git add <file>
git commit -m "여기다 메시지 작성~"

# 귀찮은 그대들은 위해 두개를 한 줄에..
git commit -am "여기다 메시지 작성~"

git add . 도 좋지만, 파일별로 / 기능별로 add commit 하는 습관! 을 추천합니다 :)

그리고 commit을 할 때에도 message가 중요하다고 언급했었죠~? 이와 같이 의미 있는 커밋 메지지 작성하는 게 좋아요! 브렌치 명과 같이 메시지도 팀원들과 미리 메시지 포을 정하고 작업 시작하는 걸 추천해 드려요!

그렇게 한다면 모두가 무엇이 왜 변경되었는지 쉽게 이해할 수 있답니다~

마지막으로 재미를 위해 제가 실제로 최근에 commit 할 때 사용한 메시지 몇 개 남기고 마치도록 하겠습니다!!

FIX: 이번에 진짜 버그 고침. 아마도.

REVERT: 새벽 2시에 망친 거 되돌림.

FEAT: 눈이 소중하니까 다크모드 추가.

REFRACTOR: 동일한 함수 4개를 1개로 합침.

CHORE: 존재 이유를 모르는 파일 삭제.

STYLE: 아무도 못 알아볼 navbar 애니메이션 추가.

저의 Git SOS 아티클, 재미있게 읽으셨나요? 😊


여러분도 유용한 Git 꿀팁이나 재미있던 Git 경험이 있으시다면 마구마구 댓글이나 글로 공유해주세요!
혹시 이번 글이 여러분의 "어?!" 모먼트를 해결하는 데 도움이 되었다면, 저와 Git의 애증 관계도 조금은 개선되지 않을까 기대해봅니다. 😆

모두 즐겁고 성공적인 Git 생활 하시길! 💻✨


여러분의 깃 꿀팁 기다리고 있을게요!

6
0
김나임

김나임

그래서…좋은 백엔드 개발자가 뭐지.. 💻🤔

(글 시작 전에... 중간중간 글이 아닌 사진을 추가하였습니다... 이미지를 사용하고 싶었던 저의 욕심이랄까요.. ㅎㅎ 참고해서 읽어주세요! 감사합니다 🙂)

안녕하세요, 포항시 IT 협업 동아리 PARD 서버 파트 4기로 활동 중인 김나임이라고 합니다.

해커톤에서는 다양한 직군의 사람들이 모여 하나의 목표를 향해 달리는데요. 이번 11월 15일~16일 PARD에서 진행하는 숏커톤(short-hackaton 의 줄인말)에 참여하게 되었습니다. 기획자, 디자이너, iOS 스위프트 프론트엔드 개발자들과 팀을 이루었고, 저는 서버 파트로, 백엔드 시스템을 구축하는 역할을 맡았습니다.

이 회고에서는 숏컷톤에서 팀 전체의 아이디어 구상이나 디자인 과정, 해커톤 중 받은 피드백, 문제 등 에 대한 이야기가 아니라, 제가 맡았던 백엔드 서버 개발 경험과 '좋은 백엔드 개발자란 무엇인가'에 대한 생각을 초점에 두어 공유해보고자 합니다.

숏컷톤 전 😫

" 나 진짜 아무것도 모르는 감자인데 어카지... "

image.png

숏컷톤 중 🏃‍♂️💨

너무 많은 생각이 머리를 스쳐 지나가서 정리하기가 너무 어렵네요…. 그래서 시간 순서 제 생각의 흐름을 적어봤습니다. 하하 이 부분은 그냥 재미로 읽어주세요!

( --- 선으로 분리 했으니 넘어가셔도 좋습니다!)

image.png

아이디어 정하는것도 진짜 쉽지 않은거구나… (우당탕탕 주제정하고계획세우고개발시작)

-개발 본격 시작!!!-

타다닥… 배운거 적용해서 코드 짜기..

@Operation 써서 Swagger로 프론트 분들이 편하게 읽을 수 있도록 summary도 추가해야지지..

여기서 Swagger이란 : 개발한 Rest API를 자동으로 편리하게 문서화해주는 편리한 도구이다!

image.pngimage.png---

정신없이 숏컷톤을 시작하고 ERD (개체 관계도) 부터 그려보고 누구보다 빠르게 (남들과는다르게) API 명세서를 MVP 위주로 일단! 작성하여 프론트 분들과 함께 사용할 변수명을 정하고 백엔드 개발을 시작하였습니다.

개발하고자 하는 앱에서 간단한 ERD를 지니고 있었기에 예상 시간보다 빠르게 완료할 수 있었습니다. 이에 따라 API 명세서를 보다 깔끔하고 구체적으로 작성하고, 백엔드 기능을 정리한 마크다운 파일 작성에 더 많은 시간을 투자할 수 있었습니다. 아쉽게도 프론트와 백엔드 연결은 하지 못했지만, 숏커톤은 잘 마무리하였습니다.

숏컷톤 후 🛠️🫠

끝남과 동시에 보이는 부족함.. 반성의 시작...

반성을 길게 주저리 주저리 하지 않겠습니다. KPT 회고로 정리해보았습니다.

KPT란? Keep, Problem Try의 약자로 말 그대로 계속 이어갔으면 하는 부분, 개선이 필요한 부분과 앞으로 바꿔 나가야 할 부분(Problem의 해결책)을 뜻한다.)

Keep

✅ ERD 부터 그려보는 것

✅ 코드 설명 꼼꼼하게 추가하는 것 ( 프론트분들이 볼 때 이해가 되도록)

✅ 깔끔한 API 명세서

Problem

❌ 적절한 예외 처리 부족

❌ 응답 및 에러 처리 부족

❌ 간단한 ERD 라고 만들어놓고 코드를 다시 검수하지 않은 것.

Try

백엔드개발자로서..

🔥 API 설계의 기본 원칙 다지기 ( HTTP status code 적절하게 사용하기, endpoint 네이밍 신경 쓰기…. 일관성 있고 확장가능한 API 설계하기..)

🔥 에러 처리 및 유효성 검증 ( 무슨 문제가 있을지 모른다. 일단 찍어내)

🔥 더욱 효율적인 데이터 쿼리 모델링에 대해 더 고민할 것. ( 숏커톤이라고 확장성 +보안을 무시하고 코드를 짠 것에 대해 반성중이다..)

팀내에개발자로서..

🔥 소통을 더 할 것, 프론트 개발자들뿐만 아니라 기획자와 디자이너와 소통을 더 많이 할 것.

🔥 프론트 에 대해서도 조금이나마 공부하기. → 필수는 아니지만, 기본적인 부분을 알면 협업할 때 더욱 효과적인 백엔드 개발자가 될 수 있을 것 같다.

🔥 숏컷톤 중 “죄송해요 그거는 안 돼요” 를 다음 해커톤까지 다 공부해 가자. → 안 되는 것이 아니라 못하는 거다. 다양한 데이터를 다루고 좋은 코드가 무엇인지 고민 또 고민하자….

(🔥이모지는 열정 불태워보겠다는..)

결론 = 잘 돌아간다고 좋은 코드가 아니다.

이번 숏커톤처럼 빠르게 결과를 만들어야 하는 상황에서는 "돌아가는 코드"가 우선일 수 있지만, 그 외에는 문제가 될 수도 있다. 하지만 코드가 잘 작동한다는 것은 기본일 뿐, 진정으로 좋은 코드는 그 뒤에 숨겨진 구조, 확장성, 그리고 유지보수성까지 고려가 된 코드를 뜻합니다.

그래서…좋은 백엔드 개발자가 뭐지..? 🧐

좋은 백엔드 개발자는 단순히 서버 코드를 찍어내는 사람이 아닌, 효율적이고 확장 가능하며 안전하며 유지 관리가 쉬운 시스템을 만드는 “문제 해결사”입니다. 하지만 개발은 혼자서 하는것이 아니기에 거기에서 끝나지 않는다고 생각합니다. 진정으로 좋은 백엔드 개발자는 팀원들과의 소통, 사용자 경험에 대한 이해, 그리고 끊임없는 학습을 통해 더 나은 서비스를 제공하려는 자세를 갖춘 사람이라고 생각합니다.

이번 숏커톤을 통해 "잘 돌아가는 코드"와 "좋은 코드"의 차이에 대해 고민할 수 있었으며, 부족한 점을 발견하고 성장의 방향성을 잡을 수 있었습니다. 앞으로도 더 나은 개발자가 되기 위해 끊임없이 고민하고 도전할 것입니다. 여러분도 함께 성장해 나가길 바랍니다. 감사합니다!

15
6
김나임

김나임

번역사가 알려주는 코딩 공부법

안녕하세요! 저는 IT 협업 동아리 PARD 4기 서버 파트에서 활동 중이며, 번역사로도 일하고 있는 김나임입니다. 간단히 저를 소개하자면, 저는 영어, 스페인어, 한국어를 구사하는 다국어 번역사이고, 컴퓨터 언어도... 어..음...(넘어갈게요).

코딩을 처음 시작했을 때의 막막했던 기억이 아직도 생생한데... 시간이 지나면서 자연스럽게 코딩을 익히고 있다는 걸 깨닫게 되었죠?! ( C 포인터 배우기 시작했을 때 여기까지 올 줄 몰랐습니다 ^^)

돌이켜보니, 제가 사용한 학습법이 저희가 평소 일상에서, 그리고 어릴 때부터 자연스럽게 터득해 온 방법과 비슷하다는 걸 깨달았습니다다. 어쩌면 당연한 이야기일 수 있지만, 오늘은 그 방법을 한번 정리해서 여러분과 공유해보려 합니다. 

그리고 살짝 고백하자면… 저는 번역에는 자신이 있지만, 글쓰기는 아직 서툴러요. 그래도 재미있게 읽어주시면 감사하겠습니다 !! 🤓☝️


😭 “영어 실력은 어떻게 느는거야??” 

이 질문을 살면서 정말 수도 없이 많이 받아봤습니다. 그리고 대답은 매번 똑같았습니다. “많이 쓰면 늘어!” 언어를 배우는 데 가장 중요한 건 실용적인 접근이라고 저는 자신 있게 말할 수 있습니다. 왜 그렇게 확신하냐고요? 사실, 8년 전... 그 당시 제 한국어 실력은 자판기도 몰랐을 정도였습니다.

ㅎㅎ… 그쯤 한국으로 이민 오게 되었는데 눈 떠보니 한국 학교에 다니고, 한국어로 수업을 듣고, 한국인 친구들과 24시간 함께 지내야 했으니, 한국어를 빠르게 배워야 했습니다. 그렇게 ‘자판기’도 몰랐던 제가 어느새 ‘빗살무늬토기’도 알고 있는 사람이 되어있었습니다.

이 경험 덕분에, 문법이나 어휘를 먼저 배우는 것이 아닌, 실생활에서 자주 쓰이는 표현을 흉내 내고 반복하며 자연스럽게 익히는 것이 훨씬 효과적이라는 것을 누구보다 확실하게 말씀드릴 수 있습니다. 친구 지인 선배 후배에게 몇백 번 외친 저의 언어 공부법이지만 그런데 왜 다른 분야에는 적용할 생각을 못 했는지가 지금 생각해 보니 좀 웃긴 것 같습니다…. 하하.

최근에 새로운 프로그래밍 언어를 배울 때, 처음부터 문법이나 구조를 완벽히 이해하려고 하지 않고 일단 실행시켜 보는 저의 모습을 발견할 수 있었습니다. 이런 저의 모습에서 그렇게 강조하던 저의 공부법을 코딩에도 적용하고 있다는 것을 깨닫게 됐습니다.

“ 결국 코딩도 언어지! 일단 흉내 내고 적용해…. 마치 like 아기가 말하기 시작할 때처럼…!”


📍언어는 실용적으로 배운다

어린아이가 말을 배우는 과정을 생각해 본다면, 첫 마디는 ‘가나다라...’가 아닙니다. 처음에는 ‘마마’와 같은 소리, 더 나아가 ‘엄마’ 같은 단어 정도를 먼저 배우게 됩니다. 어린아이는 이런 방식으로 부모나 주변 사람들의 말을 그대로 따라 하면서 단어와 문장을 만들어 갑니다. 아이는 문법이 틀리더라도 두려워하지 않고, 그저 자기가 원하는 말을 표현하려고 노력합니다. "엄마 맘마!" 같은 짧고 어색한 문장을 만들지만, 이 과정에서 ‘엄마 맘마 먹고 싶어’와 같이 점점 더 자연스럽게 언어를 습득하게 됩니다.

📍코딩도 실용적으로 배운다

이러한 언어 습득의 방식은 코딩에서도 똑같이 적용될 수 있습니다. 처음 코딩을 배울 때, 저 역시 ‘println()’의 정의와 문법을 배우는 것이 아니라 "Hello World"를 먼저 실행해 보며 기본적인 코드부터 따라 하며 시작했습니다. 처음에는 코드가 왜 그렇게 동작하는지 정확히 모르지만, 일단 화면에 뭐가 나오는 것을 보고 큰 성취감을 느꼈습니다. 아이가 말을 따라 하듯이, 코드도 흉내 내고 직접 실행해 보면서 배움의 첫걸음을 내디뎠습니다.

최신 프로그래밍 교육의 트렌드 또한 이와 같은 흐름을 따르고 있다는 거 아셨나요? 예를 들어, 플러터(Flutter) 공식 문서에서도 댕강 만들어진 코드로 시작이 됩니다! 이 접근 방식을 “Learn by doing”, “하면서 배우자”라고 하죠!

💻 From Copying to Creating : 모방에서 ‘모’만들지? 까지:

코드와 언어의 공통점

모방을 통해 실용적인 지식을 쌓을 수 있습니다. 언어든 코드든 처음에는 실수를 통해 배우는 것이 자연스러운 과정입니다. 오류가 생기더라도 그 과정에서 우리는 점차 발전하며, 어색했던 표현도 자연스럽게 다듬어지게 됩니다. 그런데, 왜 이러한 학습 방식이 효과적일까? 라는 단순한 질문이 떠올라 직접 찾아보았습니다.


Harvard University의 연구에 따르면, 학생들은 전통적인 강의보다 "Learn by Doing" 방식을 통해 실질적으로 더 많은 것을 배우고 기억한다고 합니다. 아래 차트를 보면, 전통적인 강의를 들을 때 학생들이 더 많이 배운다고 느낄 수 있지만, 실제로는 실습으로 더 높은 성과를 얻었다는 것을 확인할 수 있습니다.

또한, 19세기 말부터 20세기 초까지 활동한 교육학자 John Dewey는 무려 1890년대부터 실생활에서의 경험을 통해 배우는 것을 강조하셨었습니다!! (Dewey 가 외칩니다 실실천천하하자자자..)

👨 말하는 언어 vs. 🤖 프로그래밍 언어

물론 언어와 코딩에는 차이점도 존재합니다. 사람과 소통할 때의 언어는 유연하고, 때로는 규칙을 벗어나도 의미가 통하는 경우가 많습니다. 

반면 컴퓨터와 소통할 때 사용하는 언어는 그 반대입니다. (후... 말처럼 쉬웠더라면....) 프로그래밍 언어는 정확한 문법을 요구하고, 작은 오류 하나만 있어도 프로그램이 제대로 작동하지 않을 수 있습니다. 

그 반면의 반면으로 언어가 정확하면 안 되는 케이스!!

를 생각한다. 재미로 추가한 한국어로 직역하면 웃긴 MZ 영어 표현을 추가해 봤습니다.

  • "Spill the tea"
    직역: 차를 쏟아라!!!
    (실제 의미: "다 말해봐", 즉 누군가에게 모든 gossip을 털어놓으라는 뜻이에요!)

  • "He threw me shade"
    직역: 그는 나에게 그늘을 던졌다
    (실제 의미: "걔 나한테 빈정거렸잖아" 또는 "나한테 눈치 줬잖아"라는 뉘앙스~)

  • "I got ghosted"
    직역: 나 유령이 됐어...
    (실제 의미: "읽씹당함.." 상대방과 갑자기 연락이 끊겼을 때 쓰는 표현이죠!)

⭐(너무 길었지만) 결론:

결국 언어를 배우든, 코딩을 배우든, 중요한 것은 바로바로!! 실용적인 학습!! 입니다.

실수할까 봐 실패할까 봐 못할까 봐 두려워하지 않고, 직접 해보며 배우는 과정에서 점점 더 깊은 이해를 얻어가며!! 모방과 반복을 통해 스스로 “내” 걸로 만들어 나가 봅시다!!!

새로운 언어, 코딩뿐만 아니라 운동이나 악기 등 새로운 도전도 마찬가지입니다. 완벽할 필요는 없습니다. 일단 흉내 내고, 계속해서 시도하다 보면 어느새 자연스럽게 목표하던, 그리던 ‘멋진 나’의 모습이 되어있지 않을까요?!

Fake it till you make it 이라는 표현처럼 일단 부딪히며 배워나갑시다!

... 라고~ 저 자신에게도 하는 말이라 오늘도 당당하게 실패하러 가보겠습니다! 🚨

image.png

18
10

포스트

아직 포스트가 없습니다.