분류 전체보기

30%의 작업복잡한 요구사항 이해, 유지보수가 용이한 시스템 아키텍처 설계, 엣지 케이스 처리, 코드의 정확성 보장 등생성현 AI는 코드를 생성할 수 있지만, 엔지니어링에서는 종종 어려움을 격음자동화는 프로그래밍 방식에 변화를 가져왔지만, 숙련된 개발자가 필요한 이유는 변하지 않았음AI가 가장 잘하는 70%를 활용하면서, 나머지 30%에 필요한 핵심 역량과 통찰력을 강화하자.시니어 개발자 : AI를 활용한 경험의 극대화높은 수준의 기술적 결정을 내리는 능력을 갖추고 있어 해당 경험을 잘 활용해야 함아키텍트 겸 편집자'수행해야 할 작업을 설명하고(프롬프트 작성), 결과물의 정확성을 검토'하는 역할을 함AI와 함께 효율적인 페어 프로그래밍을 하자기준을 높게 잡아, 코드가 조직이 원하는 품질, 보안, 성능 기..
소프트웨어 개발 과정에서 반족적이고 기계적인 작업의 '우발적 복잡성'을 탁월하게 처리하지만, 문제 자체가 가진 복잡성을 파악하고 관리하는 '본질적 복잡성'을 처리하는 건 여전히 사람임30% 정도는 결국 인간의 심층적인 전문 지식 필요. (70%문제)생산성이 뛰어난 주니어 개발자? 취급 당함 ㅜ. 속도와 열정이 뛰어난 한편 '약물에 취한 듯'경험이 부족한 개발자는 '문제가 없어 보이네!' 라는 안일한 판단으로 그대로 사용하면 심각한 재앙을 일으킬 수 있음무엇을 만들고, 어떻게 구성할지, 왜 그렇게 해야 하는지 결정하는 창의적이고 분석적인 사고는 여전히 인간의 몫시니어 개발자는 AI 제안을 비판 없이 수용하지 않고, 포괄적인 오류 처리와 AI가 놓친 엣지 케이스 처리를 추가하면서 AI의 출력을 조정하고 제안..
AI에 의도를 어떻게 전달하느냐에 따라 코드 품질이 달라짐좋은 프로픔프트를 작성하는 것을 프롬프트 엔지니어링(prompt engineering)이라 함기초바이브 코딩 : 사용자와 AI 모델의 대화프롬프트 엔지니어링 : AI의 언어를 완벽하게 구사하는 기술AI를 두고 자연어로 프로그래밍하는 것컴파일러의 출력물이 입력된 소스 코드의 품질에 따라 다르듯이, AI의 출력물도 프롬프트의 품질에 따라 달라짐프롬프트의 패턴을 공유할 수 있다. 유사한 상황에서 재사용구체성과 명확성"웹 사이트를 만들어주세요" -> 포괄적인 프롬프트를 입력하고 마법처럼 원하는 웹사이트가 나오길 기대하는 실수를 하게 됨모든 관련 정보를 세세하게 작성해야 함프로그래밍 언어프레임워크라이브러리정렬함수를 작성하세요. 보단 명확한 프롬프트 작성고객..
ec2인스턴스를 실행했더니 UTC +0000 으로 설정되어 있어서 timezone 설정이 필요하였음$ timedatectl # 현재 설정된 시간대 확인 Local time: Sat 2025-01-25 12:10:36 UTC Universal time: Sat 2025-01-25 12:10:36 UTC RTC time: Sat 2025-01-25 12:10:35 Time zone: Etc/UTC (UTC, +0000)System clock synchronized: yes NTP service: active RTC in local TZ: no$ timedatectl lis..
Embedded Kafka 를 사용하게 된 이유외부 Kafka 서버에 의존하지 않고 안정적이고 독립적으로 테스트 하는 방법이 필요하였음타부서에서 발행하는 message를 consume하여 처리하기로 하였는데, 개발계에 카프카 서버가 셋팅되지 않음내가만든 @KafkaListener 가 정상 동작하는지 검증필요상황@KafkaListener를 통하여 consume & 비즈니스 로직 실행 코드는 완성된 상태일정상 개발계 kafka 셋팅이 완료되었을 때 테스트 지원이 힘든 상황이여 테스트 코드로 검증을 대신해야함역직렬화(deserializer)가 정상 동작 하는지여러 consumer configuration이 정상 동작 하는지Embedded Kafka를 활용한 간단 테스트참고) https://docs.spring..
2021.01.22 - [프로그래밍 노트/JAVA] - [JAVA] 가비지 컬렉터(GarabageCollector,GC)GC(Garbage Collector) 란?GC는 메모리 관리 기법 중 하나로 시스템에 있는 모든 객체의 수명을 정확히는 몰라도 런타임에 대신 객체를 추적하여 쓸모없는 객체를 알아서 제거해준다. 이렇게 자동 회수한 메모리는 깨끗이 비우고 재활용할 수 있게 된다.즉, c나 c++ 처럼 개발자가 직접 메모리를 해제하는 것이 아닌 JVM 에서는 GC가 메모리를 자동 해제해 준다.프로그래머가 저수준 세부를 일일이 신경쓰지 않는 대가로 저수준 제어권을 포기한다는 사상이 바로 자바 관리 방식의 핵심이다.동적으로 할당했던 메모리 영역(Heap 영역)에서 필요 없게 된 메모리 객체(참조가 없는 객체)..
Redis 의존성 추가spring-boot-starter-data-redis 의존성 추가implementation("org.springframework.boot:spring-boot-starter-data-redis")SpringBoot에서 외부 라이브러리 버전을 관리하기에, spring-boot-starter-data-redis 를 추가하면 해당 SpringBoot버전에서 관리하는 외부라이브러리가 자동으로 추가된다.나는 현재 SpringBoot 3.2.4 버전을 사용하여 lettuce 6.3.2.RELEASE 버전이 자동 추가된 것을 볼 수 있다.관리되는 버전은 https://docs.spring.io/spring-boot/docs/3.2.4/reference/html/dependency-version..
애플리케이션을 개발할 때 중요하지만 잘 지켜지지 않는 것이 테스트코드를 작성하는 것이다.테스트 코드를 왜 작성해야할까? 여러가지 이유가 있겠지만 결국 유지보수 비용의 절감. 즉, 개발시간의 단축이다.테스트코드가 없는 상태에서 애플리케이션의 크기가 거대해지면 기능 추가나 변경이 어려워진다. 이 상태에서 여러 개발자의 손을 타게되면 코드는 더욱더 복잡해지고 리팩토링은 커녕 자연스레 모두가 수정하기 꺼려하는 코드가 된다. (테스트 코드 부재로 여러 케이스별를 검증시에 시간이 오래걸리므로) 이렇게 코드는 방치되고 해당 기능을 수정할 때 유지보수 비용은 폭발적으로 늘어난다. 만약 테스트 코드를 작성한다면 위 상황을 모두 방지할 수 있다.자동화된 테스트? 회귀 테스트?크고 복잡한 시스템에서는 수정한 코드가 어디에 ..
프로그래밍에서 사용되는 응집도과 결합도에 대해 살펴보자참고로 좋은 아키텍처는 높은 응집도와 낮은 결합도를 추구한다.응집도관련 요소가 얼마나 한 모듈에 모여 있는가를 나타낸다.메서드, 함수 수준부터 크게는 모듈 수준에 이르기까지 모든 수준에서 응집도를 판단할 수 있다.몇 가지 기준을 대입해서 생각해보면 응집도를 판단하는데 도움이 된다.관련 코드가 한 패키지(또는 한 모듈)에 모여 있는가?관련 코드가 한 클래스에 모여 있는가?관련 코드가 한 함수에 모여 있는가?관련 코드가 한 패키지에 모여 있는가?카드가 등록되고 등록 결과를 SMS에 전송하는 기능이 필요하다고 하자.만약 카드가 등록되고 SMS 전송이 필요하니 SMS 전송기능이 card 패키지안에 있다면 응집도가 낮다고 볼 수 있다.통지 전송 관련 기능이 c..
swagger를 사용하면 api 문서 관리 및 협업에 유용하다.코드와 문서가 분리되어 있으면, 문서 업데이트가 누락될 가능성이 있다. (최신화 x)기존 프로젝트에 적용되어있는 springfox swagger를 사용하려 했더니 spring-boot 3.x 버전에서 지원을 하지 않는다고 한다. (springfox는 2018년 6월 기준으로 업데이트가 중단됨)springdoc는 v2 부터 spring-boot 3.x를 지원하니 해당 lib를 이용하면 되겠다. 워낙 문서가 잘되어 있어서 문서만 보고 적용이 가능하다. 자주 사용될만한 설정만 적어 놓자https://springdoc.org/#Introduction하나의 SpringBoot 어플리케이션에서 여러개의 OpenAPI 를 정의할 수 있다.외부에 제공하는 ..
깡냉쓰
'분류 전체보기' 카테고리의 글 목록