
숫자야구게임 구현 - 피드백 적용 전
2022. 3. 6. 17:50
개발 교육/플레이그라운드 with TDD, 클린코드
숫자야구게임 구현 기능 요구 사항 기본적으로 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임이다. 같은 수가 같은 자리에 있으면 스트라이크, 다른 자리에 있으면 볼, 같은 수가 전혀 없으면 포볼 또는 낫싱이란 힌트를 얻고, 그 힌트를 이용해서 먼저 상대방(컴퓨터)의 수를 맞추면 승리한다. e.g. 상대방(컴퓨터)의 수가 425일 때, 123을 제시한 경우 : 1스트라이크, 456을 제시한 경우 : 1볼 1스트라이크, 789를 제시한 경우 : 낫싱 위 숫자 야구 게임에서 상대방의 역할을 컴퓨터가 한다. 컴퓨터는 1에서 9까지 서로 다른 임의의 수 3개를 선택한다. 게 임 플레이어는 컴퓨터가 생각하고 있는 3개의 숫자를 입력하고, 컴퓨터는 입력한 숫자에 대한 결과를 출력한다. 이 같은 과정..

단위 테스트 실습 - 문자열 계산기
2022. 3. 2. 21:46
개발 교육/플레이그라운드 with TDD, 클린코드
단위 테스트 실습 - 문자열 계산기 다음 요구사항을 JUnit을 활용해 단위 테스트 코드를 추가해 구현한다. 요구사항 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다. 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다. 예를 들어 "2 + 3 * 4 / 2"와 같은 문자열을 입력할 경우 2 + 3 * 4 / 2 실행 결과인 10을 출력해야 한다. 본격적으로 TDD 연습에 들어가기전에 기존 소스를 단위 테스트로 변경하면서 리팩토링 연습을 해보고 싶어서 막코딩(?)을 먼저 했다 import java.util.ArrayList; import java.u..

AssertJ 맛보기(2)
2022. 3. 1. 23:13
개발 교육/플레이그라운드 with TDD, 클린코드
다음과 같은 Set 데이터가 주어졌을 때 요구사항을 만족해야 한다. public class SetTest { private Set numbers; @BeforeEach void setUp() { numbers = new HashSet(); numbers.add(1); numbers.add(1); numbers.add(2); numbers.add(3); } // Test Case 구현 } 요구사항 1 Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다. @Test void setSize() { /* Set의 size() 메소드를 활용해 Set의 크기를 확인하는 학습테스트를 구현한다. */ assertThat(numbers.size()).isEqualTo(3); assertT..

AssertJ 맛보기(1)
2022. 3. 1. 23:00
개발 교육/플레이그라운드 with TDD, 클린코드
https://edu.nextstep.camp/c/9WPRB0ys NEXTSTEP에서 자바 플레이그라운드 with TDD, 클린코드라는 과제형(?) 강의를 시작했다 단계별로 과제를 풀며 공부하는 방식이라 이론보다는 실제 코드로 습득할 수 있기에 나에게 더 잘 맞을 것 같아서 신청하게 되었다 TDD, BDD는 나름대로 혼자 공부하면서 회사 업무에 적용해보려고 했지만 쉽지않았던 주제였기에 이번 강의가 굉장히 많은 도움이 많이 될 것 같은 느낌이 든다 요구사항 1 "1,2"을 ,로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다. "1"을 ,로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다. @Test void requirementCase1()..

클린코드 - 3.함수
2022. 2. 27. 15:27
개발 서적/클린코드
1. 작게 만들어라! 함수를 만드는 첫째 규칙은 '작게', 두 번째 규칙은 '더 작게' 최대한 작게 만드는 것이 이 책에서 이야기하는 함수의 포인트이다 특히 if문, while 문 등에 들어가는 블록은 한 줄로 작성하는 것을 권장할 정도로 작게 만드는 것에 집착한다 즉, 중첩 구조가 생길 만큼 함수가 커져서는 안 된다는 뜻 함수에서 들여 쓰기 수준은 1단이나 2단을 넘어서면 안 된다 이렇게 작성하기를 권장하는 이유는 당연히 읽고 이해하기 쉽게 하기 위해서 이다! 2. 한 가지 해라! 하나의 함수는 한 가지만 처리해야 한다 그렇다면 '한 가지'의 범위는 무엇을 의미할까? 지정된 함수 이름 아래에서 추상화 수준이 하나인 단계만 수행한다면 그 함수는 한 가지 작업만 한다고 말할 수 있다 단순히 다른 표현이 아..
입고 알림봇 (Python + 카카오톡)
2022. 2. 26. 01:14
개발 지식/Etc.
아내가 sony 카메라를 엄청 갖고 싶어 하는데 최근 반도체 이슈 때문에 물량이 없어서 구할 수가 없었다.. 물론 플미가에 사면 가능하지만 그 정도로 급한 건 아니기에 포기 상태였다 고민하다가 크롤링을 공부도 할겸 입고 알림봇을 만들어보게 되었다 파이썬이 아무래도 요즘 잘나간다고하니 Java는 잠시 내려놓고 파이썬으로 개발해보았다 처음 써보는 언어라 구조나 문법도 잘 몰라서 굉장히 허접하게 완성되었... 그래도 뭐 언어가 다 비슷비슷해서 실행만 되는 수준으로 만들기에는 어려운 점은 딱히 없었다 찾아보니 알림봇은 텔레그램으로 많이 해서 고민하다가 난 잘 쓰지도 않는 앱이고 카톡으로 알림 받는 게 더 편할 것 같아서 카톡으로 결정했다 카카오톡 개발자 설정은 다 패스하고 본 코드만 업로드 정리하려고 한다 1...

서버 메모리 누수 현상 처리 과정 정리
2022. 2. 24. 21:32
개발 지식/DevOps
현재 AWS 환경으로 서버를 운영 중에 있는데 메모리 초과로 서버가 계속 다운되는 현상이 지속적으로 발견되었다워낙 사양이 낮아서 그런가 했지만 서버 상황을 모니터링을 하다 보니 메모리가 계속해서 누적되는 게 원인인 것 같았다 타 부서에서 사용하는 서버인 데다가 python 환경이어서 지식이 아예 없는 상황이었다.. 우선은 python을 다뤄본 적이 없어서 그 부분부터 파악이 필요했다 1. 파이썬의 메모리 관리Python에서는 GC(Garbage Collection)와 레퍼런스 카운트(Reference Counts)에 의해 메모리 관리를 하고 있지만,순환 참조(자기 자신을 참조)와 같은 코드가 있으면 메모리 누수가 발생할 수 있음. 2. 테스트 계획조사한 내용에 의하면 소스 코드가 문제인가 싶어서우선 ..

클린코드 - 1.깨끗한 코드 & 2.의미있는 이름
2022. 2. 20. 15:00
개발 서적/클린코드
0. 깨끗한 코드 "나중은 결코 오지 않는다." - 르블랑의 법칙 나중에 돌아와서 다시 정리하겠다는 생각은 하지말자 나쁜 코드가 쌓일수록 생산성은 떨어지고 청소할 방법이 없어진다 그렇다면 깨끗한 코드란 무엇일까? 공통적으로 얘기하는 깨끗한 코드의 특징은 중복을 피하고, 한 기능만 수행, 제대로 표현, 작게 추상화 즉, 읽기 쉽고 유지보수성이 좋은 코드이다 1. 의도를 분명히 밝혀라 책에서는 의도가 분명한 이름은 정말로 중요하다는 사실을 거듭 강조한다 좋은 이름을 지으려면 시간이 걸리지만 좋은 이름으로 절약하는 시간이 훨씬 더 많다 변수, 함수, 클래스 등의 이름만으로 존재 이유, 수행 기능, 사용 방법을 유추할 수 있도록 신경 써서 지어야 한다 따라서 주석이 필요하다면 의도를 분명히 드러내지 못했다는 뜻..
페이징 라이브러리 (PageHelper + pagination)
2022. 2. 4. 14:52
개발 지식/Memo
Spring 환경에서 mybatis 또는 ibatis를 사용할 경우 PageHelper와 Pagination 라이브러리를 사용하면 아주 간단하게 페이징 작업이 가능하다 (JPA를 사용할 경우 Pageable을 사용) PageHelper 1. 환경에 맞게 라이브러리를 추가 (SpringBoot 기준) pom.xml com.github.pagehelper pagehelper-spring-boot-starter 1.4.1 2. import 추가 import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; 3. 사용 예시 import com.github.pagehelper.PageHelper; import com.github.pa..
REST API JunitTest(MockMvc)
2022. 1. 27. 22:42
개발 지식/Memo
Spring 에서 Was를 실행 하지 않고 Web URL을 테스트 하는 방법 웹을 개발할 때 매번 URL을 테스트하기 위해 Tomcat과 같은 WAS를 실행하는 불편한 단계를 생략하기 위해서 스프링의 테스트 기능을 활용한다. GET 방식이 아니고, POST 등의 방식으로 지정되어있으며, JSON 형태의 데이터를 처리하는 것을 브라우저에서 개발하려면 많은 시간과 노력이 들어감 때문에 Junit과 spring-test를 활용하는 것을 권장 자세한 내용은 주석으로 기재 TicketVO.java package org.zerock.domain; import lombok.Data; @Data public class Ticket { private int tno; private String owner; private ..