전체 글 121

전략 패턴(Strategy Pattern)

개요 전략 패턴은 객체 지향 디자인 패턴 중 하나로 알고리즘군을 정의하고 각각을 캡슐화하여 사용할 수 있게 만드는 디자인 패턴입니다. 전략 패턴의 핵심 아이디어는 문제를 해결하는 다양한 전략(알고리즘)을 만들고 이를 동적으로 교환하여 사용할 수 있도록 하는 것입니다. 📌 헤드 퍼스트 디자인 패턴 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해줍니다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있습니다. 주요 구성 요소 1. 전략 인터페이스(Strategy) 전략 인터페이스는 상황에 따라 다르게 사용될 여러 알고리즘을 나타내는 인터페이스나 추상 클래스입니다. 2. 전략 인터페이스를 상속 받는 구체적인 전략 클래스(Concrete Strateg..

[개발일기] 2023-01-06[중요]

대학 마지막 학기가 끝나고 취업 시즌이 되었다. 이번에 교수님을 통해 외주를 하나 받았다. 나에게는 첫 외주이기 때문에 내 개발로 돈을 벌 수 있다는 점에서 기뻤지만, 혼자하기 때문에 내 개발 실력이 부족하여 구현하지 못할 것에 대한 걱정이 있었다. 외주의 내용은 대략적으로 웹으로 파일 검색기를 만들어 pdf, docx 등의 문서를 원하는 형태로 찾고, 다운로드 받아 분석할 수 있도록 하는 것이다. 첫 외주를 하면서 느낀 점은 서로 간의 의사소통이 굉장히 중요하다는 점이다. 개발 초기 단계에 원하는 바를 듣고 그에 맞게 개발을 하고 있을 때였다. 두 번째 회의에서 이런 식으로 진행하고 있다는 것을 프로토 타입으로 보여줬지만, 한 부분이 고객의 원하는 바와 달랐던 것이다. 첫 회의에서 내가 고객이 설명했던..

개발일기 2023.01.06

[Spring] DTO, DAO, Service, Mapper

오늘은 DTO, DAO, Service, Mapper에 대해 작성해보겠다. 나도 예전에 대략적으로만 알고 이렇게 쓰는구나해서 따라 사용했지만 프로젝트의 크기가 커질수록, 구조에 대해 생각하면 할수록 내가 너무 조금만 알고 사용한다는 느낌을 받았다. 그렇기 때문에 내가 사용하는 프로젝트에 잘 적용하기 위해 공부를 했다. DTO DTO는 Data Transfer Object의 약자로 계층간 데이터 교환을 위한 자바 빈즈(java beans)이다. 일반적으로 DTO는 비즈니스 로직을 갖지 않고 Getter, Setter만을 갖는다 DB에서 data를 얻어서 Service - Controller로 보낼 때 사용하는 객체이다. 그 반대로 Client로부터 요청을 받아 DTO에 담아 이동하기도 한다. DTO의 사용..

SPRING 2022.11.08

[오류일지] Error attempting to get column '' from result set

이번에 개발을 하다가 빌드 패턴을 사용하기 위해 lombok을 사용했다. getter setter도 한 번에 처리가 가능하니 좀 더 편해졌다. 그런데 문제가 생겼다. DTO를 만들어 사용하는데 자꾸 에러가 발생했다. Error attempting to get column '' from result set Cannot determine value type from string ''" 에러가 발생했는데 이유를 찾지 못해 삽질을 많이 했다. 나의 경우에는 Entity를 상속 받아 DTO를 사용했었는데 이번에 빌드 패턴을 공부하면서 구조를 바꿔 Entity는 Getter만 생성 후 그대로 두고 DTO만 그 때 그 때 필요한 데이터를 담아 사용하기로 했다. 이 과정에서 문제가 생긴 것인데 sql 데이터 값의 위치..

오류일지 2022.11.08

[개발일기] 2022-10-03 [중요]

7~9월달 사이에 진짜 많은 일이 있었다. 우선 정보처리기사를 합격했다. 저번에 필기 합격 이후 방학동안 실기를 공부하며 합격했다. 문제는 실기 합격을 하니 목표를 잃어 거의 한달동안 놀기만 했다는 점이다. 이렇게 돌아도 될까 싶을 정도로 많이 놀았다. 그리고 다시 돌아왔더니 작업을 했다. 이번에 협업을 하면서 이미지 파일 업로드에 대해 고민을 많이 했다. 원래 혼자 작업을 하면 단순히 로컬에 올리면 되지만 협업에서는 그럴 수 없었다. 고민 끝에 aws의 s3에 파일을 업로드 하기로 하였고 여러 시도 끝에 파일을 올릴 수 있게 되었다. 그런데 갑자기 aws의 내 계정이 정지가 되었다. 이게 어떻게 된 일인가 싶어 aws에 메일로 문의를 했고 곧바로 답변을 받을 수 있었다. 내 aws ec2 키가 깃허브에..

개발일기 2022.10.03

[JAVA] JAVA의 역사와 특징

자바란? 자바는 가전 제품에 들어갈 소프트웨어를 만들기 위해 탄생되었다. 썬 마이크로시스템즈의 제임스 고슬링이 개발한 객체 지향적 프로그래밍 언어이며 현재 웹 애플리케이션 분야에 가장 많이 사용하는 언어이다. 안드로이드를 비롯한 모바일 기기용 소프트웨어 개발에도 널리 사용된다. 자바의 유래 자바는 1991년 1월 제임스 고슬링이 만들었다. 자바는 처음 고안되었을 때 자바가 아닌 오크라는 이름으로 시작되었다. 제임스 고슬링의 목표는 가전 제품에 타재될 소프트웨어를 만드는 것을 목표로 하였다. 하지만 C언어의 문제점, 가전 제품의 긴 수명으로 인한 완벽한 호환을 가진 소프트웨어의 개발 요구, 가전 제품에 사용될 소프트웨어의 높은 신뢰성 필요 등의 문제에 대한 해결 방안을 모색 해야만 했다. 처음에는 C와 C..

JAVA 2022.09.20

[Spring] properties 설정과 @Value 어노테이션(null 에러)

스프링 프로퍼티를 이용한 값 설정 설정 값을 따로 분리해두면 의존 관계의 데이터를 소스 코드 변경없이 수정이 가능하다. @Value에 일반적인 값을 사용하면 내용이 바뀔 때마다 값을 변경해줘야 한다. 하지만 @Value에 프로퍼티 파일의 값을 참조하게 해주면 소스 코드의 수정 없이 @Value 어노테이션을 통해 프로퍼티에 주입되는 값을 변경할 수 있다. 또한 개발을 할 때 토큰, 시크릿 코드 등 보여주면 안되는 값들을 담고 있을 때 github에 올리면 큰 문제가 발생할 수 있기 때문에 properties에 값을 설정하여 사용하고 .gitignore 설정하여 github에 올리는 파일에서 제외한다. properties 설정법 spring framework를 기반으로 한 properties 설정 방법이다...

SPRING/설정 2022.09.16

[오류일지] Can't connect to MySQL server on '127.0.0.1' (10061)

톰캣을 실행시켰는데 에러가 나면서 실행이 되지 않았다. 에러를 확인해보니 servletContext에 빈을 생성하지 못하는 것이였다. dataSource 를 확인해보니 sql에 문제가 생긴 것을 알 수 있었다. 디비를 실행하니 Can't connect to MySQL server on '127.0.0.1' (10061) 가 뜨며 실행되지 않았다. 이 문제는 가끔씩 mysql 서비스가 실행되어 있지 않고 중지되어 있어 발생하는 문제이다. 제어판에 들어가보면 관리 도구에 서비스가 존재한다. MySQL을 사용하고 있을 경우 MySQL이 존재할 것이다. 서비스를 다시 시작해주면 된다. 나같은 경우는 MariaDB를 사용하고 있기 때문에 MariaDB를 다시 시작해주면 된다.

오류일지 2022.09.14

[Linux] IPC - 1 (파이프의 개념 - 이름 없는 파이프 pipe)

IPC는 Inter-Prcess Communication의 약어로 프로세스 간 통신을 말한다. 하나의 시스템에서는 프로세스와 다른 프로세스와의 통신만 하면 된다. 여기에 사용되는 것이 pipes, FiFOs, message queue 등이 있다. 네트워크 시스템에서는 시스템과 시스템의 연결이 우선적으로 필요하다. 네트워크 시스템 연결은 일반적으로 socket 을 사용한다. 오늘은 파이프에 대해 써보려고 한다. 파이프는 두 프로세스 사이에서 한 방향으로 통신할 수 있도록 지원하는 것이다. 셸에서는 | 기호가 파이프를 의미한다. 파이프는 크게 이름 없는 파이프와 이름 있는 파이프로 구분이 된다. 이름 없는 파이프 : pipe 별 다른 말 없이 파이프라고 하면 이름 없는 파이프를 의미한다. 이름 없는 파이프는..

Linux 2022.08.10