본문 바로가기

분류 전체보기142

configuration test 대체하기 왜 사용했나요? 테스트 자동화 도입 중 여러 DataSourceConfiguration중에서 RedshiftDataSourceConfiguration 가 있는데 TestContainer에서 제외하고 싶어서 사용했습니다. 어떻게 사용했나요? @TestConfiguration를 붙이고 아래와 같이 작성합니다. @TestConfiguration @Profile({"test"}) public class TestRedshiftDataSourceConfiguration { @Bean(name = "redshiftDataSource") public DataSource redshiftDataSource() { return new DataSource() { //... } //... } } 테스트 하고 싶은 클래스에 @I.. 2022. 5. 7.
스프링 이벤트 프로그래밍 적용하기 안녕하세요. 오늘은 이벤트 기반 프로그래밍에 대해서 알아보고 스프링부트에 적용해보는것까지 확인해보겠습니다. 이벤트 기반 프로그래밍이란? ‘사건’에 따라, 제어 흐름이 결정되어 일을 하도록 하게끔 만들어진 프로그래밍 언어 방식을 뜻한다. -위키백과- 스프링 이벤트는 언제 사용할까? 서비스간의 결합도를 낮추고 싶을때 서브 로직이 에러가 나더라도 메인 로직은 정상적 완료 하고 싶을때 이커머스 도메인으로 해당 상황을 고민해보자면 사용자가 회원을 가입합니다. 회원 가입할때 웰컴쿠폰을 발행합니다. 기존에는 회원가입 서비스에서 쿠폰서비스를 의존하여 사용했습니다. 쿠폰 발행시 에러가 나면 회원가입도 에러가 나서 회원가입이 롤백되었습니다. 스프링 이벤트를 적용하면 두가지 문제를 해결 할 수 있습니다. 구현 코드 간단한.. 2022. 5. 7.
@SpringBootTest @Transactional rollback @SpringBootTest @Transactional rollback 열심히 springboottest 코드를 짜는 와중에 @DataJpaTest처럼 @Transactional rollback이 자동으로 되는줄 알았습니다.. 그래서 알아보니 @Transactional 어노테이션을 붙여야 rollback처리가 되었습니다. 더 알아보니 WebEnvironment.RANDOM_PORT는 롤백이 안될 수 있다고 하여 직접 테스트 해보았습니다. RollBack처리가 잘 됨을 알 수 있었습니다. 테스트한 코드 GitHub - lsm7179/board Contribute to lsm7179/board development by creating an account on GitHub. github.com 결론 @Spr.. 2022. 3. 13.
엘레강트 오브젝트를 읽고 나서 https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=258374007 이 책을 읽고 나서 엘레강트 오브젝트를 다 보고 나서 역자 서문을 다시 읽었다. 역자 서문의 글들이 더욱 공감이 갔다. 저자의 문체가 단정적이고 단호 했고 몇가지 객체지향 원칙들은 공감하기 어려운것 들이 였다. 호불호 중에서 불호에 가까운 책이이였다. 그러나 저자가 적어준 원칙대로 코딩할수 있다면 객체지향적인 코드가 될거이라고 생각했다. 2.6 불변 객체로 만드세요. 원칙은 좋은 장점이 많아서 그래도 실무에 생각이다. 이책의 원칙을 벗어난 코드를 짤 경우 더욱 유심해야되는 구나 라고 생각된다. 정적 메소드, 유틸리티 메소드, 가변객체를 실무에서 사용하는 경우가 정말 많은데 최대한 지양하고 좀 더 .. 2022. 2. 4.
1주차 - TDD 해당 포스팅을 하는 이유 그동안 배운 내용들을 정리하면서 복기하여 완전히 내것으로 만들기 위함입니다. 8개의 미션이 있으므로 한개씩 내용을 정리 할 예정입니다. 학습목표 * TDD 기반으로 프로그래밍하는 경험 * 메소드 분리 + 클래스를 분리하는 리팩토링 경험 * 점진적으로 리팩토링하는 경험 과정을 통해 배운 것 TDD란 무엇인가? TDD는 Test Driven Development 이라고 하며 한글로는 테스트 주도 개발이라고 불립니다. 테스트코드를 먼저 짜고 그다음 프로덕션 코드를 짜는 개발 방법론입니다. 실패하는 테스트 코드를 작성하고 -> 테스트가 통과하게만 하는 프로덕션 코드를 작성한다 -> 통과되었다면 프로덕션코드를 리팩토링한다. 해당 싸이클을 반복하여 점진적으로 요구사항 기능을 개발한다. TD.. 2022. 1. 5.
방구석 개발자의 21년 회고와 22년 다짐 안녕하세요. 방구석 개발자입니다.😄 벌써 21년 한해가 마무리 되고 있습니다.😂 한번도 회고정리를 포스팅 해보지 않았는데 이번에 한번 해보고 지속적으로 하려고 합니다. 21년의 목표는 뭐였을까? 저는 원노트를 애용하는 데요. 원노트에 21년 첫 목표를 적었습니다. 커다란 목표 : 개발 경험 및 개발 실력을 올리자 sqld자격증 따기 깃허브와 깃에 익숙해지기 !! 블로그 포스팅 총 100개 만들기 토이 프로젝트 만들기(웹 구축 및 배포까지) 코딩테스트 3번 이상 보기 이력서 정리 (깃허브 링크, 원티드, 프로그래머스에 올려서 최신화) aws 자격증 따기 왜 그런 목표를 세웠는지 20년도 si로 이직을 하게되었고 그 즈음에 개발역량이 많이 부족하다는 것을 알게 되었습니다. 그럼에도 감사하게도 아이핍이라는 스.. 2021. 12. 30.
우아한 테크캠프Pro 3기 후기 안녕하세요. 방구석개발자 입니다.😄 그동안 포스팅을 많이 못했는데요 우테코pro에 집중 하고자 잠시 포스팅 하지 못했습니다. 우테코Pro를 하면서 많은 경험, 인사이트를 얻어서 공유해보고자 합니다. 우테코Pro 란? 우아한테크캠프Pro는 NextStep에서 만들었고 우아한형제들에서 후원하는 강의입니다. 강의 대상자는 경력 3년이상의 웹백엔드 개발자입니다. 소프트웨어 장인으로 성장해 나가는 과정의 로드맵을 제시하고, 어떤 개발자로 성장해 나갈 것인지를 제시하는 과정입니다. 링크를 타고 가보시면 더 자세하게 나와있습니다. 왜 우테코Pro를 했는지? 저는 SI회사에 근무를 하였고 SI에서는 개발 역량을 올리기 힘들었습니다. 어느 순간 자신의 성장 한계를 느꼈고 제가 짠 코드가 맞게 짠건지 앞으로도 이렇게 개발.. 2021. 12. 29.
클린 코드를 읽고 나서 안녕하세요. 방구석 개발자입니다. 클린 코드를 사서 열심히 읽었는데요. 너무 좋은 책이라서 추천 드리려고 합니다. (2회독을 했지만 아직도 어려운 부분이 많긴해요.. ㅎㅎ) 후기 이 책을 읽고 나서는 제 자신이 부끄러웠습니다. 그동안 쓰레기 코드를 양산하는게 아닐까 싶은 생각도 들었습니다. 특히 저는 예전에 boolean을 매개변수로 가지는 함수를 만든 적이 있는데 이 책을 읽고 다신 그렇게 하지 말아야한다는 것을 알게 되었습니다. 특히 동시성부분에서 멀티스레드 코드를 정말 지독하게 테스트 해야 되는 구나를 알게 되었습니다. 최근에 쓰레드를 직접 객체 생성하도록 작성한 스케줄링 코드를 개선한 적이 있는데 스프링에서 주워지는 비동기 코드라던지 의존성주입을 통해 제어했으면 어땠을까? 라는 생각과 조금 일찍 .. 2021. 9. 28.
Spring4 Junit 테스트 코드 작성기 안녕하세요. 방구석 개발자입니다. 현재 프로젝트는 스프링4, 전자정부프레임워크를 이용하여 진행하고 있습니다. 스프링부트가 아니여서 아쉽지만 코드품질을 높이고자 테스트 코드를 작성하려고 합니다. 테스트 코드 작성 각 MVC 패턴에 맞게 테스트 코드가 이루어져야 된다고 생각하여 각 패턴에 맞는 샘플 테스트 코드를 작성해보겠습니다. 우선 pom.xml 에 필요한 dependecy 추가했습니다. junit junit 4.12 test org.springframework spring-test 4.3.22.RELEASE test ControllerTest @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:ego.. 2021. 9. 20.
나도 코드 리뷰 좀 해보자! 안녕하세요. 방구석 개발자 입니다. 우리회사는 코드리뷰 문화가 없어요...😂 그렇지만 저는 코드리뷰를 하고 싶었어요. 그래서 https://shinsunyoung.tistory.com/92 포스팅 글을 보고 용기내어 동료개발자에게 코드 리뷰를 해보자고 했습니다. 다행스럽게 흔쾌히 같이 하자고 하여 이번 프로젝트에서 코드리뷰를 시도 해보았어요.👍 현재 프로젝트는 폐쇄망 + SVN 을 사용했기 때문에 git처럼 댓글형식으로 리뷰를 하진 못하였고 엑셀을 이용하여 진행했어요. 무엇을 얻었을까? 좋았던 점 지켜본다는 생각에 코드를 가독성 좋게 누군가 읽기 쉽게 짜려고 노력하게 되었어요. 제가 놓친 부분들을 짚어주워서 에러를 방지 할 수도 있었어요. 궁금한 점들을 쉽게 물어보고 또한 질문 받은 것들을 다시 정리 하.. 2021. 9. 20.
'리팩토링'을 읽고 나서 안녕하세요. 방구석개발자입니다. 여자친구가 리팩토링 책을 1판 그 귀하다는 책을 구하였고 저도 접하게 되어 읽었습니다. 좋은 코드를 만들고 싶었는데 지침은 충분히 될 수 있을 것 같습니다. 소감 chapter01 리팩토링 할만한 예제를 먼저 보여주고 리팩토링 하는 과정을 차근차근 설명해줍니다. 저도 과정을 같이 따라해보았는데요.(github_url) 맛보기 예제만으로도 좋은 리팩토링 기법을 알려줘서 어느정도 감을 잡을 수 있습니다. 리팩토링이란? 리팩토링이란 겉으로 드러나는 기능을 그대로 둔채 , 알아보기 쉽고 수정하기 간편하게 소프트웨어 내부를 수정하는 작업이다. 리팩토링의 목적은 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것이다. 리팩토링을 수행하면 겉으로 드러나는 기능에 거의 또는 아예 영.. 2021. 9. 12.
백준 5014 스타트링크 자바 5014 스타트링크 문제 보러가기 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 문제 설명 자바 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; public class Main { static int visited[]; public static void main(String[] args) throws Excep.. 2021. 8. 17.
프로그래머스 상호 평가 자바 https://programmers.co.kr/learn/courses/30/lessons/83201 코딩테스트 연습 - 2주차 [[100,90,98,88,65],[50,45,99,85,77],[47,88,95,80,67],[61,57,100,80,65],[24,90,94,75,65]] "FBABD" [[70,49,90],[68,50,38],[73,31,100]] "CFD" programmers.co.kr 자바 코드 class Solution { public String solution(int[][] scores) { StringBuilder answer = new StringBuilder(); for(int i=0;i=80){ return "B"; }else if(score>=70){ return "C.. 2021. 8. 10.
백준 7576 토마토 자바 7576 토마토 문제 보러가기 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 설명 자바 코드 import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int n, m; static int[] dx = {0, 0, -1, 1}; .. 2021. 8. 4.
ThreadPoolTaskScheduler를 이용하여 자바 스케줄러 구현 및 강제종료 구현 안녕하세요. 방구석 개발자입니다. 현재 진행중인 프로젝트에서 원하는 시간대 실행되는 배치를 등록하고 실행하는 기능을 만들어야 돼서 ThreadPoolTaskScheduler를 이용하여 구현하였는데요. ThreadPoolTaskScheduler가 뭔지 또 어떻게 사용되는지 알아보도록 하겠습니다. ThreadPoolTaskScheduler란 ThreadPoolTaskScheduler는 태스크실행 및 스케줄링에 사용되는 스프링 라이브러리 입니다. 배치 관리 할때 Thread를 개발자가 직접 제어하지 않고 실행하고 싶은 Task와 시간을 Pool에 넣습니다.그러면 ThreadPoolTaskScheduler에서 제어하여 해당 시간에 맞춰서 Thread를 생성 및 실행 시키고 종료 까지 해줍니다. 스프링 공식 문서.. 2021. 8. 2.
백준 1149 RGB거리 자바 1149 RGB거리 문제 보러가기 1149번: RGB거리 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나 www.acmicpc.net 문제 설명 자바 코드 import java.util.*; public class Main{ public static void main(String[] args) throws Exception { Scanner scanner=new Scanner(System.in); int n = scanner.nextInt(); int color[][]=new int[3][n+1]; int result[][]=new int.. 2021. 7. 29.
반응형