AI 시대에서 개발자로 살아남기 : 서비스 애정하기
·
생각 정리
사내에서 인공지능 관련 주제로 발표한 내용을 정리한 글입니다. 기업 정보 보안을 위해 일부분 문장 혹은 단어를 수정했습니다. 이로 인해 다소 어색한 부분이 존재할 수 있다는 점 양해 부탁드립니다.개요인공지능 관련 주제로 공유할만한 가치가 있는 정보에 대해서 고민하던 와중에 이번 기회에 인공지능 기술을 적극적으로 사용해보자는 취지로 인공지능에게 최근에 배포한 프로젝트의 도메인 정의서를 제공하고 모든 기능을 구현하라고 부탁해보는 실험을 진행해봤습니다. 부탁할 때까지만 해도 허접한 코드를 구현해 줄 거라고 생각하고 큰 기대를 걸지는 않았습니다. 그런데 생각보다 놀라운 결과물을 만들어내는 것을 보고 적잖이 충격을 받았습니다.Claude 에게 최근에 진행한 프로젝트 구현을 부탁한 예시제가 3~4일동안 개발한 작업..
[테스트 코드의 구성]
·
TDD
테스트 코드의 구성 요소 테스트 코드는 상황, 실행, 결과 확인의 세 가지 요소로 구성할 수 있다. 기능은 상황에 따라 결과가 달라지고 테스트 코드는 기능을 실행하고 그 결과를 확인하기 때문이다. 즉 어떤 상황이 주어지고 그 상황에서 기능을 실행하고, 실행한 결과를 확인하는 세 가지가 테스트 코드의 기본 골격을 이루게 된다. 외부 상황과 외부 결과 상황은 테스트 대상으로만 국한되는 것이 아니다. 상황에는 외부 요인이 있다. 예를 들어 DB에 접근이 필요한 테스트 코드가 있겠다. 테스트 결과를 외부에서 확인해야 할 때도 있다. 예를 들어 처리 결과를 지정한 경로의 파일에 저장하는 기능을 생각해보면, 이 기능의 실행 결과를 검증하려면 실제로 해당 파일에 접근하여 확인해야 할 것이다. 이런 외부 요인들은 개발..
[JUnit 5 기초]
·
TDD
JUnit을 활용하면 테스트 코드를 원활하게 작성할 수 있다. JUnit의 기초를 학습해보면서 테스트 코드를 작성할 수 있는 기반을 다지도록 하겠다. JUnit 5 모듈 구성 JUnit 5는 크게 세 가지 모듈로 구성되어 있다. JUnit 플랫폼: 테스팅 프레임워크를 구동하기 위한 런처와 테스트 엔진을 위한 API를 제공한다. JUnit 주피터(Jupiter): JUnit 5를 위한 테스트 API와 실행 엔진을 제공한다. JUnit 빈티지(Vintage): JUnit 3과 4로 작성된 테스트를 JUnit 5 플랫폼에서 실행하기 위한 모듈을 제공한다. @Test 애노테이션과 테스트 메서드 JUnit 코드의 기본 구조는 간단하다. 테스트로 사용할 클래스를 만들고 @Test 애노테이션을 메서드에 붙이기만 하면..
[TDD 기능 명세 ∙ 설계]
·
TDD
기능 명세 개발자가 코드를 작성하는 이유는 사용자가 사용할 어떤 기능을 제공하기 위함이다. 기능에 대한 명세는 다양한 형태로 존재한다. 파워포인트를 이용한 스토리 보드 형태일 수도 있고 회의 자리에서 간단하게 구두로 전달받을 때도 있다. 어떤 형태가 되든 간에 사용자에게 제공할 기능을 구현하려면 기능을 크게 두 가지로 나누어 생각해야 한다. 바로 입력과 출력이다. 예를 들어 회원가입 기능에서 입력과 결과는 다음과 같이 정의할 수 있다. 입력: 회원가입 정보 출력: 중복되는 아이디가 없다면 성공, 중복되면 실패 설계는 기능 명세로부터 시작한다. 다양한 형태의 요구사항 문서를 이용해서 기능 명세를 구체화한다. 구체화 과정은 다음과 같다. 입력과 결과를 도출한다. 도출한 기능 명세를 코드에 반영한다. 이런 과..
[트랜잭션과 무결성]
·
CS/Database
트랜잭션 트랜잭션은 데이터베이스에서 논리적인 기능을 수행하기 위한 작업의 단위이다. 데이터베이스에 접근하는 방법은 쿼리이므로, 여러 개의 쿼리를 하나로 묶은 단위를 말한다. 이에 대한 특징은 원자성, 일관성, 독립성, 지속성이 있으며 이를 ACID 특징이라고 한다. 1) 원자성 원자성(atomicity)은 트랜잭션과 관련된 작업이 모두 수행되거나 모두 수행되지 않는 것을 보장하는 특징이다. 예를 들어 트랜잭션을 커밋했는데 문제가 발생하여 롤백하는 경우 모두 수행되지 않음을 보장한다. 또한, 트랜잭션 단위로 여러 로직을 묶을 때 외부 API를 호출하지 않는 것이 좋다. 만약 해야한다면 어떻게 해야 할 것인지에 대한 해결 방안을 마련해야하고 트랜잭션 전파를 매우 신경 써서 관리해야 한다. 커밋과 롤백 커밋(..
[CPU 스케줄링 알고리즘]
·
CS/OS
CPU 스케줄링은 CPU 스케줄링 알고리즘에 따라 프로세스에서 해야 하는 일을 스레드 단위로 CPU에 할당한다. 프로그램이 실행될 때는 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다. 알고리즘은 CPU 이용률은 높게 하면서 주어진 시간에 많은 일을 수행하는 것이 목표이다. 즉, Ready Queue에 있는 프로세스를 적게, 응답 시간은 짧게 설정하는 것이 목표이다. CPU 스케줄링 알고리즘은 비선점형 방식과 선점형 방식으로 나뉜다. 비선점형 방식 비선점형 방식은 프로세스가 CPU 소유권을 스스로 포기하며, 강제로 프로세스를 중지하지 않는다. 따라서 컨텍스트 스위칭으로 인한 부하를 줄일 수 있다는 장점이 있다. 대표적으로 FCFS, SJF 그리고 우선순위 알고리즘이 있다. 1) FCFS (Fist C..
[TDD 테스트 코드 작성 순서]
·
TDD
테스트 코드를 작성할 때 어려운 경우나 정상 상황인 경우를 먼저 시작하면 구현 과정이 원할하게 진행되지 않을 때가 많다. 왜 그런 것일까? 초반에 복잡한 테스트부터 시작하면 안 되는 이유 만약 초반부터 다양한 조합을 검사하는 복잡한 상황을 테스트를 추가하면 해당 테스트를 통과시키기 위해 한 번에 구현해야 할 코드가 많아진다. 검증해야 하는 작업이 많기 떄문이다. 한 번에 완벽한 코드를 만들면 좋겠지만, 모두가 실력 좋은 개발자인 것은 아니다. 보통의 개발자는 한 번에 많은 코드를 만들다 보면 버그를 만들게 되고 버그를 잡기 위해 엄청난 시간을 허비하게 된다. 당연히 테스트 통과 시간도 길어진다. 구현하기 쉬운 테스트부터 시작하기 가장 구현하기 쉬운 경우부터 시작하면 빠르게 테스트를 통과시킬 수 있다. 보..
[멀티 스레딩의 장점과 문제점]
·
카테고리 없음
스레드란? 스레드는 프로세스 작업의 가장 작은 단위이다. 프로세스는 여러 개의 스레드를 가질 수 있다. 코드, 데이터, 스택, 힙을 모두 생성하는 프로세스와는 달리 스레드는 스택을 제외한 영역은 공유합니다. 멀티스레딩 멀티스레딩 프로세스 내 작업을 여러 개의 스레드로 처리하는 기법을 말한다. 하나의 프로그램에 동시에 여러 일을 수행할 수 있도록 해주는 것이다. 멀티스레딩을 사용하는 이유 프로세스로 동시에 처리하던 일을 멀티스레드로 처리할 경우 메모리 공간과 시스템 자원을 줄일 수 있다. 프로세스의 생성보다 쓰레드의 생성이 더욱 시간과 자원이 효율적으로 소비된다. 또한 쓰레드끼리는 스택을 제외한 영역을 공유하기 때문에 컨텍스트 스위칭이 프로세스의 경우보다 빠르다. 심지어 쓰레드는 프로세스와 달리 캐시클리어..