본문 바로가기

728x90

전체 글

[JAVA] 컬렉션 - ArrayList /* ArrayList란? */ List 인터페이스를 상속받은 클래스 중 하나이다. ArrayList는 추가, 삭제에 대응하여 부족한 공간을 자동으로 조정해준다. 빈번한 객체 추가 삭제가 일어나는 곳에는 ArrayList보다는 LinkedList를 사용하는 것이 좋다. /* ArrayList 메서드 */ package Collections; import java.util.ArrayList; public class LearnArrayList { public static void main(String[] args){ ArrayList list = new ArrayList(); list.add(1); list.add(2); list.add(2,3); // index 2에 3을 추가 System.out.prin.. 더보기
[HTTP] 멱등성 /* 멱등성이란? */ HTTP에서 멱등성이란 동일한 요청을 계속해서 들어올 때 서버가 동일한 상태를 유지하는 성질을 말한다. (결과를 변경시키지 않는 작업) /* HTTP의 메서드 멱등성 규칙 */ GET, PUT, DELETE 는 멱등성을 가지고 있다. GET는 지정된 URI에 리소스를 검색하는 것이므로 결과가 변경되지 않는다 (멱등성 O) PUT은 지정된 URI에 같은 리소스 생성 및 업데이트이기 때문에 결과가 변경되지 않는다 (멱등성 O) DELETE은 지정된 URI에 대한 리소스 삭제에 대한 결과는 변경되지 않는다 (멱등성 O) POST, PATCH는 호출할 때마다 상태가 달라지기 때문에 멱등성을 가지고 있지 않는다. POST는 요청받을 때마다 다른 리소스가 생성이 된다. 따라서 결과가 매번 변.. 더보기
REST API /*웹 API 특성*/ 1. 모든 클라이언트는 내부에서 API가 구현되는 방법에 관계없이 API를 호출할 수 있어야 한다. 2. API가 진화해도 기존 클라이언트 애플리케이션은 수정 없이 계속 작동할 수 있어야 한다. /*REST (Representational State Transfer)*/ - REST API는 리소스 중심으로 디자인 되며, 클라이언트에서 액세스 할 수 있는 모든 종류의 개체, 데이터, 서비스가 리소스에 포함된다. - 리소스를 식별하는 URI 식별자가 있다. - REST API는 상태 비저장 요청 모델 사용 (한번 요청을 했다고 해서 그 상태 정보를 저장할 수 없다) - URI는 명사 기반으로 작성하는 것이 좋다 /*API 작업 정의*/ GET : 지정된 URI에서 리소스의 표현을 .. 더보기
[Spring Boot] RESTAPI - 예외처리 /* 특수 예외처리 (유저 찾기 실패 시)*/ @GetMapping("/users/{id}") public EntityModel retrieveUser(@PathVariable int id) { User user = userDaoService.findById(id); if (user == null) { throw new UserNotFoundException("id:" + id); } EntityModel entityModel = EntityModel.of(user); WebMvcLinkBuilder link = linkTo(methodOn(this.getClass()).retrieveUserList()); entityModel.add(link.withRel("all-users")); return ent.. 더보기
[Spring Boot] JsonIgnore, JsonIgnoreProperty, JsonFilter /* 사용 이유 */ 클라이언트에게 보내면 위험한 데이터가 있다. 따라서 @JsonIgnore, @JsonIgnoreProperties 아니면 @JsonFilter를 이용해 클라이언트에 데이터를 보낼 시 필터링 작업을 거칠 수 있다. /* 방법 1. @JsonIgnore - field2 가리기*/ public class SomeBean{ private String field1; @JsonIgnore private String field2; private String field3; public SomeBean(String field1, String field2, String field3){ this.field1 = field1; this.field2 = field2; this.field3 = field3;.. 더보기
[Spring Boot] RestAPI - ResponseEntity, Hateoas /*REST API*/ REST (Representational State Transfer) API : 웹 서비스에서 클라이언트와 서버간의 통신을 위한 아키텍처 스타일. /*ResponseEntity - 빌더사용*/ HTTP 요청에 대한 응답을 캡슐화하는 클래스. HTTP 상태 코드, 헤더, 바디 를 포함할 수 있다. Builder를 사용하는 게 직관적이어서 더 좋다고 생각한다. @GetMapping("/test") public ResponseEntity test(){ HttpHeaders headers = new HttpHeaders(); headers.add("HeaderName","HeaderValue"); return ResponseEntity.ok() //상태코드 .headers(headers).. 더보기
[Spring Boot] 메시지 국제화 (Internationalization) /* 메시지 국제화 */ 내가 만들고 있는 웹이 여러 언어 환경을 지원할 수 있도록 설계하는 것을 의미한다. (독일에 있는 독일인이 내 웹을 보고싶다 -> 자동으로 독일어를 지원하게 하는 웹) /* 디폴트값 설정 */ 나는 REST API로 메시지 국제화를 해볼 생각이다. 그래서 localhost:8080/hello-world-internationaized 를 방문했을 때 Good Morning 을 디폴트 값으로 설정하고 독일어를 지원할 생각이다. 그러면 디폴트값은 다음과 같이 설정할 수 있다. // messages.properties good.morning.message = Good Morning 파일명은 반드시 messages.properties로 해야한다. yml파일은 안된다 (혹시 되나요?) /*.. 더보기
[Java] Predicate 인터페이스 /* Predicate 인터페이스 */ 함수형 프로그래밍을 구현하기 위해 jdk 1.8에 나왔다. /* Predicate 의 test() */ boolean test(T t); test() 메서드는 제너릭 타입 T t로 특정 작업(함수형 프로그래밍, 람다식)을 수행한다. /* 예제1 */ Predicate predicate = (input) -> input > 100; predicate.test(10); //false predicate.test(200); //true 위의 예제를 보면 함수형 프로그래밍을 만들면 test 메서드를 따로 정의할 필요가 없다. (이미 정의가 되어있다) 따라서 다음과 같은 식도 가능하다 /* 예제2 */ public void deleteById(int id){ // Todo는.. 더보기

728x90