반응형
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

먼저 사용을 위해 디펜던시를 추가 하자 

 

여기서 모든 정보를 보고싶다면

 

yml 파일에 

 

management:
  endpoints:
    web:
      exposure:
        include: "*"

을 추가 하면 

모든 api의 정보를 볼수 있다.

 

 

{
  "_links": {
    "self": {
      "href": "http://localhost:8088/actuator",
      "templated": false
    },
    "auditevents": {
      "href": "http://localhost:8088/actuator/auditevents",
      "templated": false
    },
    "beans": {
      "href": "http://localhost:8088/actuator/beans",
      "templated": false
    },
    "caches-cache": {
      "href": "http://localhost:8088/actuator/caches/{cache}",
      "templated": true
    },
    "caches": {
      "href": "http://localhost:8088/actuator/caches",
      "templated": false
    },
    "health-component-instance": {
      "href": "http://localhost:8088/actuator/health/{component}/{instance}",
      "templated": true
    },

 

완료!

반응형
반응형

안녕하세요 저는 20대 후반 국비지원에 다녔습니다.

국비 지원 수료 후 2달 동안 핀란드 및 각종 외국을 돌아다니면서 공부를 했습니다. 

물론 코딩공부

이력서를 최종적으로 고치고 

 

원티드 및 사람인에 지원을 해보았습니다. 

 

결과를 먼저 말씀드리면 

원티드는 약 30개 지원 중 2군데 서류 합격

사람인은 약 40군데? 지원 후 5군데 정도 연락온 거같습니다.

 

아직까지 미열람 및 완전히 불합통보가 되지않은 곳 포함입니다. 

 

이전 회계직 보다 확실히 취업이 쉬운 것 같습니다.

 

회계 같은 경우에는 약 100군데를 넣으면 1곳이나 2군데 서류 합격이었는데

아 물론 SI 및 스타트업 등등 다 합격 하였습니다.

모두가 SI 기업은 아닙니다.

SI 기업중에서도 주 4일 제 하는 기업에 합격이 되서 솔직히 너무 가고싶었지만 ...

해외라서 사정을 봐주지는 않더라구요

 

저는 현재 코딩 테스트 및 과제나 Spring 에서 API 를 이용하는법 및 rest API 에 대해서 심도 있게 공부 중입니다.

물론 쉬면서요

 

현재 서류 합격한곳 

스타트업 2곳

대기업 관련 1곳 (현재 코딩테스트 과제 수행중)

중소기업 4곳

 

이정도면 충분히 빠르게 취업 가능할 것 같습니다. 

 

파이팅!

반응형

'취업' 카테고리의 다른 글

취업 면접 후기 및 근황  (0) 2022.07.01
백준 브론즈3 달성 수기  (0) 2022.06.09
반응형

짜잔.. 약 29문제를 풀어서 백준 브론즈3 승급을 했다. 

솔찍히 답을 모르면 복붙 수준으로 하는 거같지만 백준 브론즈5나 4정도는 시간만 좀 많다면 

충분히 풀 수 있을 거같다. 

 

백준 브론즈수준은 

그리디 알고리즘 같은 쉬운 알고리즘도 안들어 가는거 같다. 

 

반복문 별찍기 

조건문 활용 이정도 인거 같다.

 

브론즈 1까지 달성 후 실버때 다시 글을 써야 겠다. 

반응형

'취업' 카테고리의 다른 글

취업 면접 후기 및 근황  (0) 2022.07.01
국비지원 수료 후 원티드 및 사람인 지원 후기  (0) 2022.06.12
반응형

Swagger란 개발한 REST API를 편리하게 문서화 해주고, 이를 통해서 편리하게 API를 호출해보고 테스트할 수 있는 프로젝트이다. 기본 swagger2 프로젝트 뿐 아니라 다양한 구성을 가지고 있다

 

API Documentation & Design Tools for Teams | Swagger

 

swagger.io

 

Swagger를 적용 시켜보자 

 

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

우선 이 두가지를 pom.xml에 적용시켜 보자 

 

그렇게 하면 메이븐에서 Swagger를 사용할 수 있게 된다. 

 

일단 config를 하나 생성해주자 

 

@Bean
public Docket api() {
    return new Docket(DocumentationType.SWAGGER_2)

}

이렇게 하면 완료 된다.

 

이렇게 편하게 문서 자동화가 가능하다. 

반응형
반응형

 

 

HATEOAS

(Hypermedia As the Enging Of Application State)

 

현재 리소스와 연관된(호출 가능한) 자원 상태 정보를 제공 -> 결국 하이퍼미디어 mapping !

 

RESTful API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는데,

하나의 리소스에서 파생할 수 있는 여러가지 추가 작업의 정보들을 한번에 얻을 수 있다.

 

 

 

링크를 통해서 다른 페이지로 가는 것을 다른 상태로 전이한다고 보고

이 링크들에 대한 레퍼런스를 서버 측에서 전송한다.
그럼으로서 클라이언트가 명시적으로 링크를 작성하지 않고도 

서버 측에서 받은 링크의 레퍼런스를 통해 어플리케이션의 상태 및 전이를 표현할 수 있다. 
이것이 바로 올바른 REST 아키텍처에서의 HATEOAS 구성법이다.

 

장점
- 요청 URI가 변경되더라도 클라이언트에서 동적으로 생성된 URI를 사용함으로써, 

   클라이언트가 URI 수정에 따른 코드를 변경하지 않아도 되는 편리함을 제공한다.
- URI 정보를 통해 들어오는 요청을 예측할 수 있게 된다.
- Resource가 포함된 URI를 보여주기 때문에, Resource에 대한 확신을 얻을 수 있다

 

HATEOAS란? 

 

Hateoas란 REST Api를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는 것을 의미합니다. 이러한 방법은 클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URI를 응답에 포함시켜 반환하는 것으로 가능하게 할 수 있습니다

라고 위키에 정의 되어 있다. 

 

HATEOAS를 사용해보자 

 

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
<dependency>

우선 디펜던스를 폼.xml에 추가 해보자 

 

이렇게 되면 우선 사용이 가능하다. 

 

 

@GetMapping("/users/{id}")
public Resource<User> retrieveUser(@PathVariable int id) {
    User user = service.findOne(id);

    if (user == null) {
        throw new UserNotFoundException(String.format("ID[%s] not found", id));
    }

    // HATEOAS
    Resource<User>  resource = new Resource<>(user);
    ControllerLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    resource.add(linkTo.withRel("all-users"));

    return resource;
}

우선 User 객체를 반환한다. 

user 객체가 추가적으로 사용할 수 있는 정보(링크)를 하이퍼미디어 타입으로 넣어준다. 

이때 static 메소드를 사용하면 아래의 코드를 길게 쓰지 않아도 된다.

 

//ControllerLinkBuilder linkTo = ControllerLinkBuilder.linkTo(
        //ControllerLinkBuilder.methodOn(this.getClass()).retrieveAllUsers());

retrieveAllUsers() 메소드와 "all-users" 이름으로 링크를 작업한다. 

 

link작업이 완료 되었다.

반응형
반응형

다국어 처리를 위해 프로퍼티스파일에 저장을 해서 

컴퓨터에 저장된 언어코드에 따라서 서버에 지정된 내용으로 보여준다. 

 

일단 yml 파일에 프로퍼티스에 만들어줄 파일을 선언해준다.

 

spring:

  messages:
    basename: messages

우선 나는 messages라는 이름의 프로퍼티 파일을 만들 것이다.

 

 

이런 식으로 선언을 만들어 주면 된다. 

 

그후 메인 로컬에 있는 빈등록 을 해준다. 

 

@Bean
public LocaleResolver localeResolver() {
    SessionLocaleResolver localeResolver = new SessionLocaleResolver();
    localeResolver.setDefaultLocale(Locale.KOREA);
    return localeResolver;
}

그 다음 컨트롤러에서

 

@GetMapping(path = "/hello-world-internationalized")
public String helloWorldInternationalized(
        @RequestHeader(name="Accept-Language", required=false)  Locale locale) {
    return messageSource.getMessage("greeting.message", null, locale);
}

프로퍼티의 이름이 Greeting.message라면 해당 내용을 출력해준다!

 

 

반응형
반응형

@past 나 @Size로 Vaule값을 검증해보자 

 

        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>1.1.0.Final</version>
            <scope>compile</scope>
            <optional>true</optional>
        </dependency>

우선 벨리데이션을 쓰려면 

메이븐 타입이라면 추가해주자 

 

@Data
@AllArgsConstructor
@JsonIgnoreProperties(value = {"password","ssn"})
public class User {
    private Integer id;

    @Size(max=2, message = "Name은 두글자 이상 입력해주세요!")
    private String name;
    @Past
    private Date joinDate;

@Size를 걸어서 서버에서 Name값을 사이즈를 2미만이라면 예외처리를 해보자 

 

@PostMapping("/users")
public ResponseEntity<User> createUser(@Valid @RequestBody User user){
    User savedUser = service.save(user);

    URI location =  ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
            .buildAndExpand(savedUser.getId()).toUri();

    return ResponseEntity.created(location).build();
}

@Vaild라는 어노테이션을 활용하여 구성하면 끝이난다.

반응형
반응형

예를 들면 1~3번 까지 기존 데이터가 있는데 

100번 데이터를 입력 했다고 가정해보자

그러면 오류가 날 것이다. 

 

이때 예외처리를 할 것이다. 

 

이전 DeleteUser에서 

 

if(user ==  null){
    throw new UserNotFoundExeception(String.format(id + " not pound"));
}

이것을 하기위해

UsernotFoundException이라는 클래스를 만들어 보자 

 

package com.example.restfulwebservice.user;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

// 2xx -> ok
// 4xx -> 클라이언트가 잘못
// 5xx -> 서버가 잘못
@ResponseStatus(HttpStatus.NOT_FOUND)
public class UserNotFoundExeception extends RuntimeException {
    public UserNotFoundExeception(String message) {
        super(message);
    }
}
ResponseStatus

을 사용하여 Not Foind를 선택해준다. 

이것은 500에러를 404에러로 변경해주기도 한다. 

그 후 아까 지정한

 

user가 없으면 메시지를 출력해준다. 

 

if(user ==  null){
    throw new UserNotFoundExeception(String.format(id + " not pound"));
}

100을 입력하면 100은 없다고 메시지가 출력된다.

 

반응형
반응형

저번에 해보았던 회원 등록에 이어서 삭제까지 해보고자 한다.

드디어 처음 DeleteMapping 이다. 

 

우선 서비스 클래스를 보면 

 

Iterator로 저번에 만들어둔 list 타입을 불러와보자 

user 객체로 iterator.next()로 한개 씩 불러보자 

 

그다음 while hasNext로 for문과 같은 경우이다. 

그다음 if문을 통해 불러온 아이디와 발견한 id가 같다면 

유저를 리턴한다. 

 

@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable int id){
    User user = service.deleteById(id);

    if(user ==  null){
        throw new UserNotFoundExeception(String.format(id + " not pound"));
    }

}

DelMapping 으로 User/{id}로 pathVariavble을 해준다. 

user를 불러와서 service객체에 접근한다. 

 

그리고 서비스에서 불러온 값을 다시 리턴해준다. 

 

여기서 1번 데이터를 지워보자

 

딜리트로 신호를 보내보자 

 

삭제가 잘 되었다!

반응형
반응형

저번에 회원관리중 회원 선택 후 에 셀렉트 하는 것과 회원 전체 리스트를 json으로 받는 방법에 대해 서술하였다. 

이번에는 회원 추가 즉 insert를 할 것이다. 

아직 데이터베이스 즉 JPA를 하지 않아 메모리상의 데이터를 이용하려고 한다. 

 

시작해보자 

 

저번에 user라는 data객체와 service 그리고 controller를 만들었다. 

 

private static int usersCount = 3;

    public User save(User user){
        if(user.getId()== null){
            user.setId(++usersCount);
        }
        users.add(user);
        return user;
    }

우선 데이터가 3건이 기 떄문에 

userCount라는 변수를 만들어 데이터가 추가 될때마다 

++연산자로 한개씩 올려주려고 한다. 

그 후 users를 insert(add)를 하려고 한다. 

 

    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user){
        User savedUser = service.save(user);

        URI location =  ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}")
                .buildAndExpand(savedUser.getId()).toUri();

        return ResponseEntity.created(location).build();
    }

createUser를 만들어 주고 

savedUser라는 변수를 만들어 서비스와 연결해준다. 

 

그 후 URI 를 사용하여 데이터를 전달해주면 

리턴값으로 

/users/{id} 값이 나오게 된다. 

 

즉 URI 값으로 바로 이용이 가능하다.

 

포스트맨 으로 한번 해보자 

 

 new_User 라고 name값을 추가해주고

즉 JSON으로 데이터를 전달해준다. 

post로 던져준다.

 

 

아까 만들어둔 location 값이 url로 만들어 진 것을 볼 수 있다. 

 

저 url로 접속을 해보면 

 

GET으로 접속을 해보면 아까 추가한 데이터가 추가 되었다!

 

 

반응형

+ Recent posts