본문 바로가기

Development Experience

(85)
postman으로 전송한 DTO가 계속 null로 온다면.. postman으로 POST 요청을 보낼 때 받는 쪽 Controller에서 DTO가 null인 상황이 나왔다. 처음엔 통신 쪽에 문제가 있나 싶었는데 결국 원인은 postman으로 DTO를 만들어서 보낼 때 JSON 형식이 제대로 되어있지 않았던 것이다. 클래스 명으로 묶을 필요가 없었는데 나는 클래스명으로 데이터를 한번 더 묶은 게 잘못된 형식의 원인이었다. { "id": 1, "title": "mi", "content": "con" } 위와 같이 보내면 JSON 타입으로 잘 변환되는데 { "MyDTO": { "id": 1, "title": "mi", "content": "con" } } 이렇게 감싸버려서 문제가 발생했었다.
JPA 사용 도중 DB에 값이 있는데도 findById()가 empty라면.. Spring에서 JPA를 이용해 DB의 값을 꺼내오던 도중 분명히 있는 값인데도 Repository의 findById()를 호출하면 Optional.Empty를 반환하는 현상을 마주하였다. 그래서 findById() 직전에 findAll()을 먼저 호출해보았다. 그랬더니 findAll()의 결과값이 제대로 나왔고 findById()에서도 DB에 있던 값이 잘 리턴되었다. 흠... JPA 뉴비의 관점에선 영속성에 문제가 있는 건가 싶었다. 그런데 이 함수들을 호출하기 직전에 내가 persist()를 한 것도 아니었으니 DB와 1차 캐시간의 싱크가 어긋나진 않았을 거 같은데.. 구글느님께 물어보니 이 현상은 영속성보단 DB의 연관관계 쪽에 원인이 있었다. 나의 프로그램은 A객체가 자식으로 B객체를 가지고 있..
LNK2019 에러와 네임 맹글링, 그리고 extern LIVE555로 Frame을 받아서 FFMPEG에서 Decoding 하는 프로그램을 만드는 중에 FFMPEG의 함수를 사용하는 부분에서 자꾸 LNK2019 에러가 발생하였다. 몇 번의 삽질 끝에 해결하였는데,이 과정에서 알게 된 내용은 아래와 같다. 1. LNK2019 에러 Linker > General > Additional Library Directories에 경로를 추가해도 해결이 안될 때에는 Linker > input > Additional Dependencies 에도 lib 파일을 추가해주어야 한다. 예를 들어 FFMPEG 라이브러리를 추가하고 싶은 경우 avformat.lib, avcodec.lib 등의 lib 파일 이름을 적어주면 오류가 해결된다. 2. 네임 맹글링 (Name Mangling..
Winform UI Component의 Dock 스타일 적용이 잘 안 될 경우 Winform UI를 구성하면서 Dock 스타일을 적용시킬 때, UI Component들끼리 서로 겹치는 경우가 있다. 이 경우 Visual Studio Designer에서 해당 UI Component를 오른쪽 클릭하여 Bring To Front를 선택하면 Dock 스타일을 겹치지 않게 적용시킬 수 있다.
HTML input 태그에서 text가 안보인다면.. jQuery를 이용하여 click event를 catch한 후, 이 event를 통해 얻은 데이터를 input 필드에 표출해주는 작업을 진행중이었다. 프론트 초보자인 나는 input 태그의 text 속성에 내가 원하는 데이터를 넣어주었다. $('#나의_INPUT_TAG').text("내가_원하는_데이터"); 이런 식으로. 그런데 아무리 해도 브라우저 화면에 데이터가 출력되지 않는 것이었다. html 파일에 있는 input 태그에 별 짓을 다 해보아도 데이터가 보이질 않았다. 더 당황스러웠던 건, F12를 눌러 HTML 파일을 보면 내가 출력하고자 했던 데이터가 떡하니 있는 것이었다. 내가_원하는_데이터 이런 식으로. 이게 뭐지... 싶다가 결국 구글님께 답을 얻었다. input 태그의 text가 아니라,..
두 번째 GS 인증을 하고 난 후기.. 두 번째 GS 인증이 끝난지 이미 6개월이 넘었지만..그래도 정리 차원에서 글을 남겨본다. 이번 GS 인증은 첫번째 GS 인증과는 다르게내가 속한 클라이언트 팀과 다른 개발자 동료분들이 계시는 서버 팀이 협업을 해야 하는 프로젝트였다. 이번 프로젝트의 아키텍처를 간단히 살펴보면 서버 프로그램에서 영상 데이터를 받아 분석한 후이 분석 결과값을 클라이언트 프로그램에게 전송하는 구조이다.클라이언트에서는 분석 결과값을 영상 데이터와 함께 표출해준다. 이미 한 번 경험해본 GS인증이었던지라, 두 번째 준비하는 과정은 훨씬 수월했다.적어도 GS 심사가 시작되기 전까지는.. 패닉품질팀이 서버와 클라이언트 프로그램을 받아서 TTA(GS 인증기관)에 설치한 후 며칠이 지났을 시점이었다. 품..
Gitlab CI/CD vs Jenkins CI/CD 얼마 전 Gitlab 서버를 관리하시던 수석님이 퇴사하시고, Gitlab에 관한 관리를 인계받게 되었다. 그리고 올해들어 회사의 개발자 동료 분들 사이에서 소스 코드 품질을 높여야 할 공감대가 생겼다. 이전에 SW개발병으로 군복무를 하던 시절, Unit Test와 CI/CD를 경험한 덕분에 내가 주도적으로 회사에 이 tool들을 도입할 기회가 주어졌다. CI/CD를 도입하기 위해 Jenkins CI/CD와 Gitlab CI/CD를 비교하는 글을 찾던 중 괜찮은 글을 찾아 정리해보았다. [ Jenkins CI/CD ] 1. 스크립트를 짜서 관리하기가 좋다. (구조화가 잘 되어있고, 이해하기 쉽고, 가독성이 좋다) 2. JAVA로 개발되었기 때문에 JRE가 설치된 환경에서 구동해야 하고, MIT 라이센스를 ..
프로그램 구현할 때 깨달은 점 프로그램을 만들 때 상식적으로 있어야 할 기능들은 문제가 되지 않는 선에서 미리미리 구현해두자. 교통량 측정 프로그램에서 회전 교통량을 좌회전, 우회전, 유턴 교통량으로 각각 나누지 않고 저장하는 프로그램을 몇달전 인수인계 받았다. 그 당시 구분해서 저장하는 게 낫지 않나 싶어서 이슈를 제기했었지만 당장 급한 일들이 많았던 시기라 해당 이슈는 진행하지 않는 걸로 얘기가 됐었다. (여기서 한가지 실수한 게 구두로만 간단히 얘기하고 text로 남기지 않은 게 좀 아쉬웠다. 당시에는 그냥 내 머리속에서 나온 안건이라 사업적인 우선순위에서 이 안건이 후순위임을 인지하는 정도에서 멈췄었는데, 이를 text로 남기지 않았다 보니 삼자간의 의사소통이 원활하지 않았다.) 그 이후에 어느 정도 여유가 생겼을 땐 이 이슈..