Git flow, gitignore, convention 정해서 협업하기
gitattributes 파일은 디렉토리별로 지정할 수 있어요. 전체 프로젝트에 적용한다면 최상위 디렉토리에 둔다. 1.3. 파일의 마지막에는 새줄 newlineeof 파일의 마지막은 새줄 문자 LF로 끝나야 합니다. 2.1. 식별자에는 영문숫자언더스코어만 용인 identifiercharscope 변수명, 클래스명, 메서드명 등에는 영어와 숫자만을 사용합니다. 상수에는 단어 사이의 구분을 위하여 언더스코어를 사용합니다. 정규표현식 AZaz09에 부합해야 합니다.
2.2. 한국어 발음대로의 표기 금지 avoidkoreanpronounce 식별자의 이름을 한글 발음을 영어로 옮겨서 표기하지 않습니다.
들여쓰기 Indentation
들여쓰기는 코드의 계층을 구분하기 위해 추가하는 문자입니다. 4.1. 하드탭 사용 indentationtab 탭tab 문자를 사용하여 들여씁니다. 탭 대신 스페이스를 사용하지 않습니다. 이를 잘 준수하기 위해서 스페이스와 탭을 구별해서 보여주도록 에디터를 설정합니다. 4.2. 탭의 크기는 4개의 스페이스 4spacestab 1개의 탭의 크기는 스페이스 4개와 같도록 에디터에서 설정합니다.
4.3. 블럭 들여쓰기 blockindentation 클래스, 메서드, 제어문 등의 코드 블럭이 생길 때마다. 1단계를 더 들여씁니다.
공백 Whitespac
8.1. 공백으로 줄을 끝내지 않음 notrailingspaces 빈줄을 포함하여 모든 줄은 탭이나 공백으로 끝내지 않습니다. 8.2. 대괄호 뒤에 공백 삽입 spaceafterbracket 닫히는 대괄호 뒤에 으로 문장이 끝나지 않고 다른 선언이 올 경우 공백을 삽입합니다. intmasks new int0, 1, 1
좋은 예
int[] masks = new int[] {0, 1, 1};8.3. 중괄호의 스타트 전, 종료 후에 공백 삽입 spacearoundbrace 여는 중괄호 앞에는 공백을 삽입합니다.
줄바꿈 Linewrapping
줄바꿈은 작성한 명령어가 줄 너비를 초과했을 경우 코드 가독성을 위해서 강제로 줄을 바꾸는 것을 말합니다. 6.1. 최대 줄 너비는 120 linelength120 최대 줄 사용 너비는 120자까지 가능합니다. 6.2. package,import 선언문은 한 줄로 1linepackageimport ackage,import 선언문 중간에서는 줄을 바꾸지 않습니다. 최대 줄수를 초과하더라도 한 줄로 씁니다.
6.3. 줄바꿈 후 추가 들여쓰기 indentationafterlinewrapping 줄바꿈 이후 이어지는 줄에서는 최초 시작한 줄에서보다. 최소한 1단계의 들여쓰기를 더 추가합니다.
인자 전달
gdb로 sysv를 로드한 후, caller 함수 호출에 breakpoint 를 설정하여 함수 실행시 각 인자가 어떻게 저장되는지 살펴보려고 합니다. 위 결과창을 보시면 알 수 있듯이, caller 함수가 호출되면 각 이자 값들을 차례대로 받아서 rdi, esi, edx, ecx, r8d, r9d 에 저장하고 7부터는 스택에 쌓는다. callee 함수 호출 부분에 breakpoint를 설정한 후, 레지스터 상태를 확인해보자. 각 레지스터에 값들이 정확하게 들어가 있는 것을 확인할 수 있어요.
스택 프레임 저장
x5i 명령어로 callee 함수 도입부를 살펴보면, 가장 먼저 push rbp를 통해 호출자 caller의 rbp를 저장하고 있습니다. rbp는 스택 프레임의 가장 낮은 주소, 즉 가장 상단을 가리키는 포인터입니다. 그러므로 callee 함수 실행 전, 가장 상단에 위치하는 스택인 caller의 스택 프레임 주소를 현재 rbp가 가리키고 있다고 보시면 됩니다. ush를 통해 rbp 주소를 스택에 쌓아주고 있으므로, callee 함수에서 반환될 때 caller의 스택 프레임으로 돌아갈 수 있어요.
si 명령어로 push rbp를 실행하고, 스택을 확인해보시면 rbp 값caller의 스택 프레임 주소인 0x7fffffffe070이 저장된 것을 확인할 수 있어요.
Domain
결과를 보시면 JSON Key값과 필드명도 다르고 null로 찍힘. 골 때림. 원인분석을 합니다. 보니깐 HTTP 메시지 컨버터의 쪽의 문제가 아닐까 해서 찾아봤다.
HTTP 메시지 컨버터가 무엇인가요? 요청 에서 쪽지를 읽어 들이거나RequestBody, 응답 에 쪽지를 작성할 때ResponseBody HTTP 메시지 컨버터가 동작합니다. HTTP 헤더와 컨트롤러 요청 및 반환타입 정보를 조합쳐서 컨버터의 여러 종류 중 하나가 선택됩니다.
API는 JSON 형태로 받기 때문에 MappingJackson2HttpMessageConverter가 선택되어 Jackson 컨버터가 실행됩니다. 그래서 Jackson 컨버터가 네이밍 규칙에 따라 데이터를 찰떡같이 매핑해줍니다.
Jira와 연동
티켓을 커밋브랜치와 통합합니다.
자주 묻는 질문
들여쓰기
들여쓰기는 코드의 계층을 구분하기 위해 추가하는 문자입니다. 더 알고싶으시면 본문을 클릭해주세요.
공백 Whitespac
8 궁금한 내용은 본문을 참고하시기 바랍니다.
줄바꿈
줄바꿈은 작성한 명령어가 줄 너비를 초과했을 경우 코드 가독성을 위해서 강제로 줄을 바꾸는 것을 말합니다. 궁금한 내용은 본문을 참고하시기 바랍니다.