본문 바로가기
728x90

전체 글157

redis dockerfile 로 local에서 띄우기 현업에서 개발을 하다보면, redis 를 사용해야할 시기가 찾아온다.왜 redis를 써야되는지에 대한 리뷰는 차차 다뤄보도록 하고, 지금은 redis docker file 을 local 에서 어떻게 띄우고 실행시켜 보는지에 대해 간단하게 다뤄보도록 하겠다. 우선 도커파일의 구성은 아래와 같아. #docker fileFROM redis:7.2.5-alpine3.20EXPOSE 6379CMD ["redis-server"] 티스토리에 yaml 이 보이질 않아, 어쩔수없이 java 코드로 표기하긴 했지만 파일명의 확장자는 yaml 이다.  간단하게 코드 내용을 보면, redis 7.2.5 에 대한 이미지를 불러다가(불러올때는 경량화 버전인 alpine 을 쓰도록 하자),6379포트로 사용하겠다라는 의미이다. d.. 2024. 11. 1.
1년차 개발자가 할 수 있는일을 10년동안 하면? if(1년차 개발자가 할 수 있는일을 몇년? === 10){ return "1년차 개발자";}; 10년차 개발자가 될 수 있을까??(개발자라면, 굳이 답하지 않아도, 저 질문을 들었을때 가슴속으로 떠오를 것이다.) 학부 컴공을 졸업하고 개발자가 된 동기, 선후배 중에 SI 로 취업한 사람도 다수있었다.대형 SI 에서 일했던 사람은 그나마 덜하긴한데, 중소 SI 에서 일했던 개발자들은... 허구한날 로그인 기능 개발, 조회기능개발 등 CRUD 범주에서 벗어나질 못했다.물론 트래픽도 발생하지 않아 서버이중화나 최근 각광받았던 마이크로 서비스라던지 MQ 등의 기술을 사용할 기회조차 없었다. 이제는 학부생이나 비전공자들도 개발을 배웠다는 사람들은 CRUD 개발이 가능하다(Full-stack으로) 굳이 말.. 2024. 10. 30.
체류시간 높이는 방법 ? 서비스나 블로그를 운영하다보면은,사용자로 하여금 어떻게 더 체류시간을 늘려서 서비스이용을 더 할 수 있을까?라는 고민을 많이 하게 된다. 체류시간: 사용자가 사이트 접속 시 사이트 내 머무르는 시간 무신사나 이구(29cm) 같은 사이트에서 옷을 구매하려고 해도리디(RIDI, 웹툰 소설 유니콘)와 같은 사이트에서 여러 콘텐츠를 관람할때에도체류시간과 사이트 매출의 영향도는 매우 높다. 즉, 체류 시간이 높을 수록 사이트 수익도 올라가는 것이다!!!그럼 어떻게 체류시간을 높일 수 있을까? 그건 사용자의 그룹과 패턴부터 조사할 필요가 있다. 1. 사용자의 그룹관점에서     - 이 사용자가 실제 구매를 하려고 온 사람인가? 아니면 외부 광고를 보고 들어온 사람인가?     - 처음 구매를 하는 사람인가? 반복적.. 2024. 10. 3.
MySQL Replication 구성 방법 서비스를 운영하다보면은 하나의 단일 구성으로 DB 를 사용했을때,DB의 지원한계로 인해 원활한 운영이 되지않는경우가 있다. 대표적으로 DB Transaction 처리 건들이 많아서, 계속해서 thread pool wait현상이 발생하는경우, 단일 조회 처리가 매우 오래걸리는 건 때문에(과도한 서브쿼리, 복잡한 쿼리 사용으로)다른 자원에서는 단순 조회만 처리하면되는데, 이건들도 앞단의 pending 작업으로 인해 대기가 발생하게 된다.(얼마나 비효율적인가?) 이렇게 등장한 개념이 CQRS!! 조회와 조회가 아닌건들을 분리하자!그리고 이를 지원하고자 나온 개념이 MySQL의 Replication!!(조회라도 분산시켜주자) Replication 구성을 하게되면,Master 와 Master 가아닌 Slave 로.. 2024. 10. 2.
Kafka 세팅 시 참고할 만한 내용정리 1. 카프카의 기본 구성     - Zookeeper       : 카프카의 정상동작을 보장하기 위해 메타데이터를 관리하는 코디네이션(Broker의 Health Check 포함)     - Producer       : message 생산자     - Kafka Broker       : kafka 설치 서버     - Consumer       : message 소비자     - Partition       : 병렬처리를 위해 하나의 토픽을 분산 처리     - Topic       : Data 저장소     - Offset        : message 가 저장되는 위치(읽어오는 순서에 영향. FIFO) 1-1. Kafka 내 토픽 생성    - kafka-topics.sh 명령어를 이용하면 됨(Ka.. 2024. 10. 1.
처음부터 잘하는 사람은 없다? 처음부터 잘하는 사람은 없다!!누구한테나 처음이 있는 것이고, 처음치곤 잘한건 있을지 언정,진정 잘하는 이와 비교한다면 분명 부족한 부분이 있을 겁니다.(처음부터 잘하고 나중에도 잘하는 경우는,,, 오히려 발전이 없는게 아닐까요?) 개발도 마찮가지입니다.컴퓨터 공학과 1학년 재학당시 동기들 중 70프로가량이 개발에 대해 어려워했고, 이게 뭐야?이거 알아서 어디다 써먹어?int?string?if?for?class?어떻게 활용해야해?이걸로 어떻게 개발을 해?이걸로 어떻게 돈을 벌지? 개발을 처음 접해본 이들에게는 머릿속에 온통 ??? 로 가득찼을 것입니다. 개발을 처음 하는 대부분이 겪는 현상이지요(일상에서 마주할 일이 없잖아요?) 실무에서도 마찮가지입니다.누구에게나 처음은 존재하는거고,처음부터 잘하는것은 .. 2024. 9. 21.
모키토 (Mockito) - Java Spring Test Code 기초 스프링 기반의 Test Code 의 대부분은클래스를 불러와서 값을 input 해보고 의도한 결과값이 나오는지를 확인하는 것이다. 이때 특정 클래스를 불러와서 (상속 포함) 테스트 코드를 짜야할 경우가 생기는데,이럴때 사용할 수 있는 라이브러리가 바로 Mockito 인 것이다. Mockito 는 간단하게 mock 객체를 생성할 수 있고 mock 객체에 stub 을 정의하고,테스트 할 수 있게 해준다.(Mockito 를 쓰지않을 경우 직접 interface를 구현해서 테스트를 해야할 수도 있는데,그럴 경우 작업량과 가시성이 매우 떨어지게 된다. 그럼 어떻게 써야하는가?(생각보다 간단하다).   @Mock : 의존성 주입(모의 객체 용), 사용하지 않을 시 실제 클래스 구현채를 사용하게 되므로         .. 2024. 9. 21.
Test Code 기본 - Java Spring Boot 서비스 레벨에서 간단한 메쏘드 하나 만들고(껍데기만)인텔리제이 기준으로 단축키 (CMD+N) 이나 마우스 우측 클릭 후 Generate(생성)을 클릭 후Test 옵션을 클릭하면 "Create Test" 라는 팝업창을 뛰울 수 있다.JUnit 5버전이 기본값으로 설정되어있는데,옵션항목에 보면 /@Before, @After라는 영역을 확인할 수 있을 것이다. class ReserveServiceTest { @BeforeEach void setup() {} @AfterEach void afterSetup(){} @Test Void getReserveInfo(){}} 테스트할때 @SpringBootTest 어노테이션은 webEnvironment 매개변수를 지원하는데.. 2024. 9. 18.
TDD 에 대한 고찰 개발조직을 이끌다보면,여기저기서 TDD 에 대해 많이 거론되곤 했다.과거의 회상을 기반으로 TDD 에 대한 나의 관점을 정리해 보려한다. 우선 집고 넘어가야할 것이 있다.Test Code 를 작성하는 것과 TDD 는 다르다.(Test Code 는 필!수! 이다. 다만, 테스트 커버리지는 정할필요성이 있다!) Test Code 의 경우 여러 기준점을 들 수 있지만 일반적으로 60~80%, 주요 도메인의 경우 90%까지 산정하기도 한다. TDD 의 개발 프로세스를 보면,1. 테스트를 가장 먼저 작성2. 그 테스트를 통과하도록 코드를 작성3. 테스트 코드 실행 후 오류발생 여부 확인(지정된 값이 나오지 않아도 오류로 표기된다.) 위의 과정으로 개발해 보았을때,현실적인 문제에 직면한다.1. 테스트 범위2. 테스.. 2024. 9. 17.
@Builder 빌더패턴 레거시한 소스를 보면은 아래와 같이 객체를 생성하고 값을 할당하는 것을 흔하게 보았을 것이다.ReservationInfo reservationInfo = new ReservationInfo(1, "reserved"); 하지만, 이렇게 구성하는데에는 몇가지 단점이 존재한다. 1. (위에는 고작 2개이지만) 생성자 파라메타가 많을 경우 가독성이 좋지않다.2. 값을 입력하는 순서가 매우 중요하다.3. 어떤 값에 어떻게 매핑했는지 코드만 보고 정확하게 알기 힘들다.   이를 해결하기 위한 방법으로, 빌더패턴을 사용할 수 있다!! Java spring 기반으로 백엔드 개발을 하다보면DTO, Domain, Entity level 에서 객체에 값을 입력 시 Lambok 의 builder 를 사용하는것을 보았을 것이다.. 2024. 9. 17.
단위테스트 (unit test) - Spring Boot Test !! 단위테스트라고 개발하다보면 종종 들어봤을것이다.(또는 자주) 단위테스트는 무엇일까?단위테스트란, 애플리케이션 테스트 중 코드 단위를 가능한 작게(메쏘드 단위까지) 분리해서 하나의 메쏘드를 테스트 하는것을 말합니다.오류 관점과 Data 유효성 관점 모두를!(단위 테스트와 통합테스트를 구분못하는 신입 개발자도 자주 보이죠?) 그럼 단위 테스트를 하는 이유는?그것 바로 개발 운영 관점에서 가장 빠른시점에 오류를 발견하고 수정할 수 있다는데 있습니다.왜? 운영배포 후 오류 발견하고 빠르게 해결하면 되지 않나?라는 질문을 한번씩 받는데요(스타트업에서만)굉장히 위험한 행위가 되겠죠? 이커머스 도메인만 보더라도...User 는 사이트의 신뢰성을 잃을 것이고, 재고가 없거나 잘못된 금액으로 결제가 되었을 경우, 또는 .. 2024. 9. 17.
영속성 이란? (Java Spring Boot 완전기초) 흔히 백엔드 개발을 처음 접하다 보면, 영속성이란 말을 듣게된다. 영속성? 영속성 컨텍스트?JPA?JDBC (interface, Driver)? 영속성을 사전적 정의부터 말하고 들어가는게 이해하기가 쉬울꺼같아,사전적의미는: 영원히 계속되는 성질이나 능력(네이버 국어사전 참조) 자 그럼 영원히 계속 되게 하는 성질이 Java spring 에는 어떤게 있을까?바로 Data 처리가 그 중 하나이다! 간단한 온라인 쇼핑몰을 개발하면,고객정보, 상품정보, 결제정보, 주문정보는 필수적이다.이러한 Data 가 시스템 개발 초기때와 운영중일때가 같을까?당연히 아니다!(아무도 사용안하고 아무도 관리 안 한다면 모를까?) 한명이라도 회원가입해서 사용하면 그정보는 어딘가 저장되어야한다그럼 그 정보는 어디에 저장을 할까?Da.. 2024. 9. 16.
Spring Boot 완전 기초 인텔리 J 는 설치하고!!!자바 환경 세팅이후,,, 스프링 부트 시작!(2012년에 등장!) 스프링 부트는 웹 어플리케이션을 보다 가볍고(spring 보다), 쉽고 빠르게 만들 수 있도록 도와주는자바 웹 프레임워크이다.  웹 프레임 워크: 쿠키처리, 로그인 아웃처리, DB 핸들링 등을 지원  컨트롤러 예시import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.ResponseBody;@Controllerpublic class OrderController { @GetMapping("/g.. 2024. 9. 15.
Spring Boot 기본 Spring Boot 기초에서 주로 사용하는 dependency?- Lombok- Spring Web- Spring Data JPA(기초일때만 사용)- H2 Database(다른 DB 이용 시 사용 가능)- MySQL Driver  POJO: Ioc/DI, AOP, PSA 통해 달성, OOP에 충실하면서, 특정 환경과 기술에 종속되지 않고 재사용가능하도록 설계된 Object예, 툼캣으로 세팅해서 사용중이다가 네티로 변환되더라도, 어플리케이션 레벨에서의 수정은 없어야한다.-> 테스트 간편화, 확장가능한 유연한 코드사용, 원활한 디버깅 가능(Spring 은 POJO프로그래밍을 지향하는 프레임 워크!)  느슨한 결합(DIP의 원칙적용): 직접적으로 구현체를 의존성 주입해서 사용하는 것이 아닌 추상체를 두어 사.. 2024. 9. 15.
Java 완전 기초 SOLID1. SRP: 단일 책임원칙(하나의 클래스는 하나의 책임만 가진다.)2. OCP: 개방, 폐쇄 원칙(확장에는 open, 수정에는 close)3. LSP: 리스코프 치환 원칙(객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 instance 로 바꿀수 있어야한다.)4. ISP: 인터페이스 분리 원칙(특정 client 를 위한 인터페이스 여러개가 범용 인터페이스 하나보다 낫다)            필요한 상황마다 나누자!5. DIP: 의존관계 역전 원칙(추상화에 의존!, 구현체에 의존하면 안됨)  Java의 객체지향1. 캡슐화2. 상속3. 다형성4. 추상화 Java 자료형1. Primitive Type    : boolean, byte, char, short, int, long, float,.. 2024. 9. 13.
POJO 란 무엇인가? POJO 프로그램이란...특별한 제약이나 복잡한 상속 구조 없이 순수한 Java객체를 의미!JavaBeans 규약을 따르지 않더라도 복잡한 framework나 특정 기술 스택에 의존하지 않고단순하게 설계된 Class를 말한다 그럼 장점으로는? 구조가 단순해진다: 특별한 상속이나 구현을 요구하지 않기때문에 코드가 간단하고 이해하기 쉬워진다(그렇다고 상속이나 구현을 완전히 배제하는 것은 아니다!) 유연해진다: 타 프레임워크나 라이브러리에 종속되지 않기 때문에 변경되더라도 POJO에는 직접적인 영향이 없다. 테스트 편리: 독립적이고 자유롭게 동작하기때문에, Unit 테스트 실행이 가능하다 2024. 9. 13.
Java 에 대해서 Java 가 발생한 배경부터 살펴보겠다. 우선 자바는 썬 마이크로 시스템즈로 부터 95년도(아주 오래전)에 객체지향프로그램밍언어(OOP)의 시대를 알린 언어이다.오픈 소스기반으로 운영되면서, 왜 개발언어와 툴은 오픈소스로 운영되야하는지에 대한 모범을 보여준 사례중 하나이다.당시, Java 의 Main 경쟁 언어로써 C#(마이크로 소프트) 언어가 있었는데, C#은 C 를 기반으로 한 개발자들이 많고 Visual Studio(Visual Studio Code 아님) 라는 IDE의 강점과 오류발생시 마이크로 소프트 개발자들이 직접 error fix를 한다는 강점이 있었다. 하지만,,, 결과는 자바의 승리(?)아무리 마이크로소프트개발자들이 개발하고 테스트 및 이슈 수정을 한다하더라도, 전세계의 개발자를 당해낼 .. 2024. 9. 13.
Kafka 세팅 docker compose yaml Kafka 를 세팅하는 방법에는 여러가지가 있다. 1. on premise 로 직접 설치 2. docker 로 하나씩 띄우기 3. docker compose 로 한번에 띄우기  4. K8S 내 yaml 로 띄우기 5. K8S 내 kustomise 로 띠우기 6. K8S 내 helm 으로 직접 설치하기 이글에서는 다양한 방법중 docker compose 를 이용하여 local 환경에서 가볍게 세팅하는 방법에 대해 알아보겠다.우선 docker compose 를 사용하기 위한 설치는 필수!!(brew setting 은 필수!!(mac 기준이다.)brew install cask docker 설치한 다음 docker -v 와docker-compose -v 명령어를 실행하여 제대로 설치가 되었는지 확인해보자! 이미.. 2024. 9. 12.
Jr 개발자의 취업난? (feat. 주니어 개발자) [ 지금이 투자 받기 좋은 시기인가? ] 개발 모임에 나가면 공통적으로 하는 이야기가 있다.2022년 말부터 투자받기가 힘들어졌다고...(물론 투자금 생각하면서 사업을 하는것보다 명확한 BM과 성과지표를 가지고 사업을 하는게 이상적이긴하지만,사업 종류에 따라 투자금이 매우 중요하게 작용하는 경우가 있다(많다).) 이러한 여파가 사업을 하는 경영진에만 해당되는것이 아니라, 채용시장에도 많은 영향을 미친것으로 보인다.불과 2020년 covid 시즌만 보더라도 막대한 현금유포?로 인해 거대 자금이 내수시장으로 유입되면서,투자 받기가 상대적으로 쉬워졌다.(이때는 개발자 모셔가기 바쁜시기였다.)경력 만 1년만 되어도 서로 모셔가기 바빴고, 심지어 비전공자들도 대규모 인원이 취업시장에 유입되었다.(누구나 다 아는 .. 2024. 9. 9.
hreflang 태그 ( Hreflang tag ) ? SEO 를 적용하다보면은 Hreflang 태그라는 내용을 접하게된다. hreflang 태그는 과연 뭘까?hreflang 태그는 사이트에서 지역과 언어를 사용함에 따라 검색엔진에게 이사이트는 이 지역전용 사이트야! 라고 알려주는 역할을 수행한다. 예를 들면 한국, 미국, 일본에 거주하는 고객을 대상으로 판매하는 커머스 사이트를 개발한다고 하자! 그럼 그 사이트는 해당 지역의 대한 정보와 언어로써 표시가 되어야 하는데, 해당정보를 접속자의 IP 만을 가지고 하기에는 다소 무리가 있다.(국가 및 지역별로 하나하나씩 노가다 작업을 수행하여야 하고 (미국은 또 얼마나 넓은가? 주별로 작업이 가능한가?) 이는 곧 유지보수 부채까지 이어질 수 있다.)자동으로 설정하지 않을 경우에는? 고객이 그 사이트를 이용할까? 자.. 2024. 9. 6.
728x90