본문 바로가기

전체 글35

[42GG] Custom Validator 실행 순서 1편: Custom Validator 실행 순서2편: LocalDateTime과 Timezone 문제 상황NullPointerException 발생프론트에서 API 테스트 중에 NullPointerException이 발생한다는 상황을 전달받았습니다. 로그를 확인해보니 리펙토링을 진행하면서  추가한 Custom Validator에서 NullPointerException이 발생하고 있었습니다. @Getter@AgendaCapacityValid@AgendaScheduleValid@NoArgsConstructor(access = AccessLevel.PROTECTED)public class AgendaCreateReqDto { // ... @NotNull @Future(message = "마감일은 현재 시간 이.. 2024. 8. 4.
[C/C++] C 언어에서 상속과 다형성 구현하기 Ray Tracing in One Weekend는 레이 트레이싱에 대한 기초적인 개념을 설명하고 있습니다. 하지만 예제가 C++로 작성되어 있기 때문에 miniRT 과제를 위해서는 C++ 코드를 C 스타일로 변경해야합니다. 대부분의 내용은 그대로 사용할 수 있지만, 다수의 오브젝트를 처리할 때 상속과 다형성을 활용해서 Hittable와 Hittable_list 클래스를 구현하는 부분은 C에서 구현하기 까다롭습니다. 이 글에서는 Hittable와 Hittable_list 클래스를 위해 C언어에서 상속과 다형성을 활용했던 내용을 공유하려고 합니다. 상속과 다형성상속이란 객체 간의 계층 구조를 형성하는 것을 의미합니다. 상위 계층의 객체를 하위 계층에서 상속받으면, 따로 속성과 행동을 정의하지 않아도 상위 계.. 2024. 7. 29.
[임베디드] FT232RL USB 모듈 제어 - UART UARTUART(Universal asynchronous receiver/transmitter)란 병렬 형태의 데이터를 직렬(Serial) 방식으로 전환하여 전송하는 통신 방법입니다. UART는 대부분 3.3V ~ 5V를 사용하기 때문에 -12V ~ 12V을 사용하는 RS-232, RS-485와 같은 통신 표준으로 변경하여 전달하는 경우가 많습니다.TX(송신)와 RX(수신) 2개의 핀을 사용하며, 데이터 통신을 위한 클럭을 사용하지 않기 떄문에 송신측과 수신측에서 사전에 baud rate, data size 등을 설정해야합니다.데이터 형식Start bit : 통신의 시작을 의미하는 비트Data bit : 데이터를 표현하는 비트, 5 ~ 8비트를 사용합니다.Parity bit : 오류 검증을 하기 위한 .. 2024. 7. 29.
[42GG] 데이터 플로우 다이어그램 작성 데이터 플로우프로젝트를 진행하면서 분석/설계가 미흡하다는 것을 느꼈습니다. 대회와 팀 관련 로직에서 비즈니스 로직은 정리를 했지만, 대회와 팀 간에 데이터 플로우가 없어서 개발하는데 누락사항이 발생하거나, 비즈니스 로직을 코드에서 명확하게 표현하지 못하는 상황이 발생했습니다. 대부분 하나의 엔티티에서 발생하는 변경에 대해서는 잘 구현이 되었지만, 하나의 기능에 여러 엔티티의 값을 변경하는 로직에서 이런 실수들이 발생했습니다. 예를 들어서 대회가 취소되는 경우 참가 신청했던 모든 팀의 인원들의 티켓을 환불하는 로직, 대회가 시작했을 때 확정이 안된 팀들에 대해서 참가 취소 및 환불 처리 로직 등이 있습니다. 또한 비즈니스 요구사항이 계속 바뀌면서 커뮤니케이션이 힘들어졌습니다. 해당 기능을 구현하는 사람은 .. 2024. 7. 26.
[C/C++] 개발 환경 구성하기 05 (miniLibX) [C/C++] 개발 환경 구성하기 01 (아키텍처 설계, 브랜치 전략) [C/C++] 개발 환경 구성하기 02 (cmake, libft, google test) [C/C++] 개발 환경 구성하기 03 (gcovr, codecov) [C/C++] 개발 환경 구성하기 04 (github action, norminette, codecov) [C/C++] 개발 환경 구성하기 05 (miniLibX)개발 환경을 구성하는 마지막 글입니다. 이번에는 42서울에서 사용하는 그래픽 라이브러리인 miniLibX를 실행파일에 추가하도록 하겠습니다. google test, libft와 마찬가지로 FetchContent를 사용하여 빌드 시점에 동적으로 가져오도록 설정했습니다. FetchContent_Declare( minili.. 2024. 7. 23.
[42GG] 효율적인 TestFixture 관리 지난 회고에서 TestFixture에 대해 알게 되었고, 팀원들 모두 java-text-fixtures를 활용할 수있도록 gg-utils에 TestFixture를 생성하기로 결정했다. 추가적으로 현제 프로젝트에서 TestDataUtils라는 오직 하나의 클래스로 TestFixture를 모두 관리하고 있다는 문제점을 알게되었고, TestFixture 관련 논의에 이어서 추가적으로 어떻게 TestFixture를 효율적으로 관리할 수 있을지 논의했다. 먼저 현재 사용되고 있는 TestDataUtils의 가장 큰 문제점은 어떤 엔티티를 어디서 생성하는지, 즉 어떤 메서드가 존재하는지 파악하기 어렵다는 것이었다. 따라서 이를 해결하기 위해 먼저 TestDataUtils 분리해야한다. gg-utils ├── bui.. 2024. 7. 22.
[C/C++] 개발 환경 구성하기 04 (github action, norminette, codecov) [C/C++] 개발 환경 구성하기 01 (아키텍처 설계, 브랜치 전략)[C/C++] 개발 환경 구성하기 02 (cmake, libft, google test)[C/C++] 개발 환경 구성하기 03 (gcovr, codecov)[C/C++] 개발 환경 구성하기 04 (github action, norminette, codecov)[C/C++] 개발 환경 구성하기 05 (miniLibX) 이번에는 github action에서 norminette와 codecov를 실행하는 workflow를 작성하겠습니다. github action은 자동으로 빌드, 테스트, 배포할 수 있게 해주는 CI/CD(Continuous Integration/Continuous Deployment) 서비스입니다. github action.. 2024. 7. 22.
[C/C++] 개발 환경 구성하기 03 (gcovr, codecov) [C/C++] 개발 환경 구성하기 01 (아키텍처 설계, 브랜치 전략)[C/C++] 개발 환경 구성하기 02 (cmake, libft, google test)[C/C++] 개발 환경 구성하기 03 (gcovr, codecov)[C/C++] 개발 환경 구성하기 04 (github action, norminette, codecov)[C/C++] 개발 환경 구성하기 05 (miniLibX) 지난번에 이어서 이번에는 google test와 gcovr를 연동하는 방법에 대해 공유하도록 하겠습니다. google testgoogle test는 c++ 단위 테스트 프레임워크입니다. 다양한 조건의 assertion과 커스터마징(pre-test, post-test 등)을 지원하기 때문에 테스트를 작성하는데 많은 도움을 줍.. 2024. 7. 22.
[C/C++] 개발 환경 구성하기 02 (cmake, libft, google test) [C/C++] 개발 환경 구성하기 01 (아키텍처 설계, 브랜치 전략)[C/C++] 개발 환경 구성하기 02 (cmake, libft, google test)[C/C++] 개발 환경 구성하기 03 (gcovr, codecov)[C/C++] 개발 환경 구성하기 04 (github action, norminette, codecov)[C/C++] 개발 환경 구성하기 05 (miniLibX) 지난번에 이어서 개발 환경 세팅에 대한 내용입니다. 이번 글에서는 CMakeLists.txt를 작성했던 경험을 공유하려고 합니다. 저는 다음 4가지 부분으로 나눠서 진행했습니다.기본 프로젝트 설정FetchContent 설정 (libft, googletest)실행 파일 빌드테스트 실행 파일 빌드 기본 프로젝트 설정먼저 기본 .. 2024. 7. 22.