Programming 85

Spring - WebClient 사용해보기

개요 SpringBoot, Spring 환경에서 WebClient 를 사용하여 API Request 를 하는 클라이언트 프로젝트를 만들어보기. 서버와 API 통신을 위해 필요한게 무엇인지 알고 WebClient 의 기능사용해보기. Why ? WebClient 란? Spring 5.0에서 추가된 interface 이다. 이전 버전에서는 클라이언트로 RestTemplate 를 사용했으나, 비동기식 통신의 필요성으로 인해 WebClient 가 나오게 되었고, 현재 버전에서는 WebClient로 개발하는게 권장되는 상황이다. 그렇다면 RestTemplate 와 WebClient 가 어떤차이점이 있을까 ? RestTemplate 와 WebClient 의 차이점을 보기쉽고 간편하게 볼 수 있도록 표로 비교해보자 R..

Programming/Spring 2022.05.16

GO - unresolved dependency, GOPATH error

고랭(GO)으로 개발하는 고퍼분들이라면 한번쯤 경험해봤을 겁니다. 왜? 특히 아직 고랭이 익숙하지 않은 분들이면 더욱 그렇죠.. 바로 GOPATH 혹은, unresolved dependency 로 빨간줄이 뜨며 go.mod 파일에 dependency 들이 load가 안된다던가, go 파일들의 import 가 적용이 안된다던가 하는 문제들이죠 보통 이런 문제들은 해당 프로젝트를 새로 시작하거나, Git 같은 version control tool 에서 import 하면서 생기는 문제입니다. 원인은? 간략하게 원인만 말하자면 해당 프로젝트는 내부에 go.mod 파일로 인해 모듈화되어 GOPATH가 전역 PATH가 아닌 지역 PATH이기 때문에 이에 ide 를 설정해야하지만, 보통 java등 타언어로 개발하던 ..

Programming/GO 2022.05.15

GO - RESTful API만들기 Echo Framework & Gorm ORM

개요 회사에서 업무중 몇가지 정보를 거래처에 제공하는 API를 만들어 줘야하는 경우가 생겼다. 기존의 주 업무는 Java - SpringBoot 프레임워크를 사용해서 했었지만, 이번에 새롭게 Golang 을 사용하는 건 어떤지 얘기가 나와서 고민하다가 결구 Go 언어로 새롭게 API를 개발해 보기로 했다. 먼저 Go 언어는 가볍고 미니멀한 프로젝트를 만들기에 적합하고, 비교적 다른언어보다 최근에 나온언어인지 웹 개발자들이 쓰기 좋은 기능들이 기본 내장되어 있는 듯했다. 일단 Web 통신을 위해 프레임워크나 라이브러리중 적합한 기능일 선택해야했는데, 1. 먼저 기본내장된 http/net, 2. github 순위 1위에 GIN 3. 그리고 한국에서 그나마 인기있다는 echo 이 3가지만 생각했고, 내장되어있..

Programming/GO 2022.04.30

Golang - 한글 UTF8 을 EUCKR 서버로 인코딩처리하기.

개요 저는 현재 맡은 업무가 고(golang) 언어로 API 서버를 개발하는 업무를 맡았습니다. 그런데, 개발 중간에 tcp 통신을 통해 다른 server에게 request 해야할 사항이 생겼는데, 문제는 이 서버에서 한글은 EUC-KR 형식인겁니다.. 이게 왜 문제냐? 바로바로.. 고 (golang 이하 고 라고 하겠습니다)는 rune 이라는 특이한 스타일로 타입을 사용하고 이를 UTF-8로 인코딩합니다. 그러므로 고 언어는 UTF-8 타입을 디폴트로 사용하게 되는데요, 이 타입 그대로 byte 타입으로 변환하게 된다면, byte 코드 또한 그 타입을 따라갑니다. 그래서 통신하는 정보에 한글이 필요하다면 어떤 타입의 char type을 정해뒀는지 확인 할 필요가 있습니다. JSON 보통 다른 serve..

Programming/GO 2022.04.30

스프링부트 API - POST Method 활용하기

개요 POST Method의 의미와 종류, 이를 활용하는 방법을 알아보기 POST Method란 리소스를 전달하여 추가하기 위해 사용되는 API로 Create를 위해 사용되는 Method이다. POST API의 종류 @PostMapping : POST API를 제작하기 위해 사용되는 어노테이션, @RequestMapping + POST method의 조합, 일반적으로 추가하고자 하는 Resource를 HTTP body에 추가해서 서버에 전달하여 요청, 그렇기에 @RequestBody 를 이용해 body값을 받음 DTO : key 와 value 가 정해져있지만, 받아야할 파라미터가 많을 경우 DTO객체를 사용하는 방식 // 1. postMapping @PostMapping(value="/member") ..

Programming/Spring 2022.04.04

스프링부트 API - GET Method 활용하기

개요 API와 GET Method를 이해하고 활용하는 다양한 방법을 알아보기 GET 어노테이션의 종류 @RequestMapping : value와 method로 정의하여 API를 개발하는 방식으로 요즘 추세는 사용하지 않는 편 @GetMapping : 별도의 파라미터 없이 GET API를 호출하는 경우 사용되는 방법 @PathVariable : GET형식의 요청에서 파라미터를 전달하기 위해 URL에 값을 담아 요청하는 방법 @RequestParam : GET형식의 요청에서 쿼리 문자열을 전달하기 위해 사용되는 방법 // 1. ReqeustMapping @RequestMapping(value = "/hello", method = RequestMethod.GET) public String requestTes..

Programming/Spring 2022.04.03

스프링부트 API - REST API 란? 스프링부트로 API만들기

개요 REST API 란 무엇이며, 스프링부트에서 RESTful 한 API를 만들기위해 어떤방식으로 설계및 구현할지 알아보기위해 포스팅합니다. API 란? API는 Application Programming Interface의 줄임말로 응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스를 뜻합니다. API를 사용하면 내부 동작 로직을 알지못해도 정의되어 있는 기능으로 쉽게 사용할 수 있게됩니다. 여기서 Interface란 어떤 장치간에 정보 교환을 위한 수단이나 방법을 의미하며 대표적으로 마우스, 키보드 등이 해당됩니다. REST 란? REST는 Representational State Transfer 의 줄임말로 자원의 이름으로 구분하여 해당 자원의 상태를 교환하는..

Programming/Spring 2022.04.02

이펙티브 자바 - 2장 객체 주입 , 관리 , 참조

아이템5. 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라 여러 클래스가 하나 이상의 자원에 의존합니다. 예를 들면 맞춤법 검사기는 사전에 의존하는데, 이런 클래스를 정적 유틸리티 클래스로 구현한 모습을 드물지 않게 볼 수 있습니다. 사용하는 자원에 따라 동작이 달라지는 클래스에는 정적 유틸리티 클래스나 싱글턴 방식이 적합하지 않습니다. // 정적 유틸리티를 잘못 사용 public class SpellChecker { private static final Lexicon dictionary = ...; private SpellChecker(){} public static boolean isValid(String word) {} public static List suggestions(String typ..

Programming/JAVA 2022.03.15

이펙티브 자바 - 2장 빌더, 싱글톤, private 생성자

아이템 2 - 생성자에 매개변수가 많다면 빌더를 고려하라 정적 팩토리와 생성자에는 똑같은 제약이 하나 있다. 선택적 매개변수가 많을 경우 적절한 대응을 하기가 어렵다는 점이다. 처음 자바를 공부할 때, 사용자가 필요로하는 경우의 수가 많을수록 생성자의 가짓수도 많아지는 경우를 경험해보았을 것이다. 1. 점충적 생성자 패턴 public class Camping { private final int tent; private final int clothes; private final int backpack; private final int food; private final int camper; public Camping(int tent, int food) { this(tent, food); } public C..

Programming/JAVA 2022.03.13

HTML <datalist> 태그 속성

개요 HTML 태그 중 select 태그와 하위 태그인 option을 이용해 리스트를 셀렉하고 그 value를 넘기는 경우가 상당히 많을 것이다. 이때 리스트의 양이 많아 스크롤을 쭉 해야하거나, 한눈에 찾기 어렵다면 유저입장에서 여간 불편한 일이 아닐 수 없다. 이를 해결하기 위해 다양한 방법이 있겠지만, 그 중 HTML5 에서 기본으로 제공하는 태그인 datalist 를 이용해 적용하기로 해보겠다. 하나 두울 세엣 네엣 datalist 란? 태그와 유사한 태그로 로 표기한다. 하위 태그로 을 이용해 셀렉할 수 있고, 검색 혹은 자동완성기능등이 있어 option 태그가 많을 때 찾는 용도로 유용하게 사용이 가능하다. select 태그와 다른점이라면, 검색기능과 input 태그를 주체로 사용한다는 점이다..