오늘 공부한 내용

  • 코드카타 2문제
  • Spring 심화 프로젝트 발제
  • SA 작성 / API구상, ERD구상, 와이어프레임 작성, Entity작성

https://teamsparta.notion.site/HHive-56f9924035a34b94ae3b5e4ec4d1421a

금일 팀원들과 만든 SA이다.

오늘의 느낀점

드디어 마지막 프로젝트에 들어가게 되었다.

이번 프로젝트의 주제로는 이전에 만들었던 Trello를 바탕으로 서로 간의 취미를 공유해서 만남을 가지는 어플리케이션을 만드는 것이 목표이다.

저번에 확실히 많이 배우긴 했다만 이번에 만드는 부분을 보니 어려워 보이는 부분도 많아서 시간이 많이 걸릴거 같다.

마지막 프로젝트인 만큼 힘내서 잘하고 싶다.

KPT 회고

Keep

  • 원활한 일정공유와 의사소통
  • error를 계속 공유해서 함께 문제 해결

Problem

  • 주말이 필요한 팀원들
  • 부족한 실력....

Try

  • cd 까지 구축
  • 아키텍쳐 작성
  • test code 작성
  • 발표자료 작성 시, 자세한 설명 부족 → 피드백 반영해야함

한마디

이지선

충분한 의사소통과 빠른 의사결정으로, 기획부터 개발까지 문제 되는 부분 없이 매끄럽게 진행됐습니다. 각자 하기로 한 부분은 어떻게든 끝내는 모습이 인상 깊었습니다. 결과도 좋고 팀웍도 좋았어서 깔끔하게 마무리해서 너~~~무 좋았습니다

 

김종규

원활한 의사소통과 문제 발견 시 공유해서 해결하는 부분이 팀의 긍정적인 시너지를 많이 느끼게 되었습니다. 이번 프로젝트 수고많으셨고, 최종 프로젝트까지 다들 화이팅하시길 기원합니다.

김대영

젭 뿐만아닌 부재시 슬랙을 이용하여 빠른 정보전달을 통해서 빠른 문제 해결, 코드 작성으로 프로젝트 작업간 효율성을 극대화하여 높은 완성도를 이루었던거 같습니다. 또 이번 프로젝트에서도 새로운 기능과 프로그램에대해 알고 배울수 있어서 좋은 경험이 되었습니다.

김혜윤

역대 원할한 소통이 가장 잘 된 팀으로 문제 해결 및 개발 진행에서 집단 지성을 잘 사용한 것 같습니다. 피드백을 통해 트러블 슈팅 작성 시, 문제 상황을 더 자세하게 작성 해야겠습니다. 순서 변경 로직을 프론트 없이 백엔드에서 좀 더 효율성(?)있게 구현 할 수 있는 방법을 찾아보는 것이 숙제…! 다들 수고하셨습니다.!

오늘 공부한 내용

  • 코드카타 2문제
  • Spring 심화 프로젝트 작성

 

새로 알게된점

Swagger - UI 란?

  • 애플리케이션의 RESTful API 문서를 자동으로 구성하는 특수 도구를 말한다.

 

 프로젝트 내에서 지정한 url들을 아래와 같이 자동으로 문서화해준다.

이곳에서 간단히 api를 볼 수 있을 뿐만 아니라, 요청과 응답 테스트 또한 진행할 수 있다.

런 점들이 백엔드와 프론트엔드 간의 협업과 소통을 돕는다.

 

 

Swagger - UI를 사용하기 위한 설정

build.gradle 추가 설정

의존성에 springdoc-openapi-ui를 추가한다.

dependencies {
// spring doc
implementation group: 'org.springdoc', name: 'springdoc-openapi-starter-webmvc-ui', version: '2.3.0'
}

 

 

Config 파일 구성

package com.sparta.missionreport.global.config;

import io.swagger.v3.oas.annotations.OpenAPIDefinition;
import io.swagger.v3.oas.annotations.enums.SecuritySchemeType;
import io.swagger.v3.oas.annotations.info.Info;
import io.swagger.v3.oas.annotations.security.SecurityScheme;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@OpenAPIDefinition(info = @Info(title = "Mission Log App",
	description = "Mission Log App Api 명세서",
	version = "v1"))
@SecurityScheme(name = "Bearer Authentication",
	type = SecuritySchemeType.HTTP,
	bearerFormat = "JWT",
	scheme = "Bearer")
@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI openAPI() {
        return new OpenAPI()
                .components(new Components());
    }
}

@Configuration 어노테이션을 통해서 OpenAPI 관련 문서를 생성하며,

@OpenAPIDefinition, @SecurityScheme 어노테이션을 SwaggerConfig에 적용하면, 위의 페이지의 Authorize버튼을 구현할 수 있다.

 

이 버튼은

회원정보로 발급받은 토큰을 입력하면 그 시점부터 swagger-ui에서 테스트로 보내는 요청은 모두 그 회원의 권한으로 보낼 수 있다.
로그인되지 않은 사용자, 로그인한 회원, 관리자 이러한 종류의 회원 권한들로 다양하게 요청 테스트를 진행할 수 있다.

 

.properties 파일 설정

# swagger
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

# spring doc
springdoc.swagger-ui.path=/swagger-ui.html
springdoc.swagger-ui.tags-sorter=alpha
springdoc.show-login-endpoint=true

객체를 생성할 수 있는 빌더를 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값을 셋팅하고 마지막에 build()를 통해 빌더를 작동 시켜 객체를 생성한다.

 

controller 설정

@Slf4j
@RestController
@RequestMapping("/api")
@RequiredArgsConstructor
@Tag(name = "2. Board Controller", description = "Board Controller")
@SecurityRequirement(name = "Bearer Authentication")
public class BoardController {

    private final BoardService boardService;

    @Operation(summary = "보드 생성")
    @PostMapping("/boards")
    public ResponseEntity<CommonResponseDto> createboard(
            @AuthenticationPrincipal UserDetailsImpl userDetails,
            @RequestBody @Valid BoardDto.CreateBoardRequest createBoardRequest) {
        BoardDto.Response response = boardService.createBoard(userDetails.getUser(),
                createBoardRequest);
        return ResponseEntity.status(
                        HttpStatus.CREATED)
                .body(new CommonResponseDto(HttpStatus.CREATED.value(), "보드가 작성되었습니다.", response));
    }

위의 예시는 익명게시판에서 보드를 생성하기위한 컨트롤러 의 Create 부분 이며 

Controller의 상단에 @Tag 어노테이션과 @Operation 어노테이션을 추가한다.

 

Swagger 명세서 작성

@Tag / api 그룹 설정을 위한 어노테이션

name 속성으로 태그의 이름을 설정할 수 있고, description 속성으로 태그에 대한 설명을 추가할 수 있다.

@Tag에 설정된 name이 같은 것 끼리 하나의 api 그룹으로 묶게 된다.

 

@Operation / api 상세 정보 설정을 위한 어노테이션

summary 속성으로 api에 대한 간략한 설명, description 속성으로 api에 대한 상세 설명을 추가할 수 있으며, responses, parameters 속성 등을 추가로 적용할 수 있다.

 

Request, Response 객체 설정

public class BoardDto {

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Schema(description = "보드 생성 요청 dto")
    public static class CreateBoardRequest {

        @NotBlank
        @Schema(description = "보드 이름", defaultValue = "개발 전체 진행 완료하자")
        private String name;

        public Board toEntity(User createdBy) {
            return Board.builder().name(name).createdBy(createdBy).build();
        }
    }

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Schema(description = "보드 수정 요청 dto")
    public static class UpdateBoardRequest {

        @Schema(description = "보드 이름", defaultValue = "보드 이름 수정 test")
        private String name;

        @Schema(description = "보드 색상", defaultValue = "blue")
        private Color color;

        @Schema(description = "보드 설명", defaultValue = "보드, 수정 완료하기")
        private String description;

        @Schema(description = "보드 마감 일자", defaultValue = "2023-01-03 09:00")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
        private LocalDateTime deadLine;
    }

    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Schema(description = "보드 정보 반환 dto")
    public static class Response {

        @Schema(description = "보드 id", defaultValue = "1L")
        private Long id;

        @Schema(description = "보드 이름", defaultValue = "제발...문제없이 작동해주세요")
        private String name;

        @Schema(description = "보드 설명", defaultValue = "카드, 댓글 기능 구현 완료하기")
        private String description;

        @Schema(description = "카드 색상", example = "red")
        private String color;

        @Schema(description = "생성 유저 이메일", defaultValue = "sparta@gmail.com")
        private String createdBy;

        @Schema(description = "보드 작업자 리스트", defaultValue = "[\"spsta@gmail.com\", \"worker1@gmail.com\",\"worker2@gmail.com\"]")
        private List<String> boardWorkers;

        @Schema(description = "보드 생성 일자", defaultValue = "2023-01-01T00:00:00")
        private LocalDateTime createdAt;

        public static BoardDto.Response of(Board board) {
            return Response.builder()
                    .id(board.getId())
                    .name(board.getName())
                    .description(board.getDescription())
                    .color(board.getColor().getColor())
                    .createdBy(board.getCreatedBy().getEmail())
                    .boardWorkers(board.getBoardWorkerList().stream().map(BoardWorker::getUserEmail)
                            .toList())
                    .createdAt(board.getCreatedAt())
                    .build();
        }
    }
}

위의 예시처럼 @Schema 를 이용하여 각부분의 설명, 기본값을 설정하여 기입할수 있다.

 

@Schema / Request, Response 객체에 대한 설정을 위한 어노테이션

description으로 설명을 추가할 수 있고, defaultValue으로 기본적으로 사용할 값을 설정할 수 있으며, example을 통해 예시를 설정할 수도 있다.

 

느낀점

Postman이 아닌 Swagger-UI 라는 새로운 API 테스트 프로그램을 프로젝트 하면서 배우게 되었다.

혼자 작성해서 확인해야하는 Postman에 비해 Swagger-UI는 코드 작성시 팀원들과 토의로 일정 규칙하에 작성하면 기본값을 설정한상태로 테스트가 가능하기에 좀더 효율적으로 시행할수 있다.

프로젝트를 하면서 팀원들에게 새로운 것을 배울때 마다 감사를 느끼며 더욱더 열심히 해야겠다고 생각한다.

오늘 공부한 내용

  • 코드카타 2문제
  • Spring 심화 프로젝트 작성

 

새로 알게된점

@Builder

빌더 패턴 (Builder patter) 이란?

 

복잡한 Object들을 단계별로 구축할 수 있는 생성 디자인 패턴을 말하며 이 패턴을 사용하면, 동일한 구성코드를 사용하여 다양한 타입과 표현을 제공한다.

 

일반적으로 객체를 정의하고 그 객체를 생성할 때 보통 생성자를 통해 생성하는 것을 생각한다.

Bag bag = new Bag("name", 1000, "memo");

 

 

하지만 생성자를 통해 객체를 생성하는데 몇 가지 단점이 있기에 빌더패턴으로 작성시 이를 보완할수 있다.

Bag bag = Bag.builder()
		.name("name")
        	.money(1000)
        	.memo("memo")
        	.build();

 

객체를 생성할 수 있는 빌더를 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값을 셋팅하고 마지막에 build()를 통해 빌더를 작동 시켜 객체를 생성한다.

 

빌더를 사용하는 이유

  •  뛰어난 가독성을 가지고 있다.

생성자 파라미터가 많을 경우 가독성이 좋지 않다.

예시로 위에 작성했던 생성자 파라미터가 3개가 아닌 7~8개가 되면 어떻게 될까?

Bag bag = new Bag("name", 1000, "memo", "abc", "what", "is", "it", "?");

 이렇게 작성될시 각 값들이 어떤 값을 의미하는지 이해하기 힘들 것이다.

 

하지만 빌더 패턴으로 구현하면 각 값들이 빌더의 각 값들의 이름 함수로 셋팅되어 각각 무슨 값을 의미하는기 파악하기 쉬워지며 가독성이 높아지고 추후 같은 타입의 다른 변수의 값을 서로 바꿔 넣는 것을 방지 할 수도 있다

Bag bag = Bag.builder()
		.name("name")
        	.money(1000)
        	.memo("memo")
            	.letter("This is the letter")
            	.box("This is the box")
        	.build();

 

  •  데이터의 순서에 상관없이 객체 성성이 가능하다.

생성자의 경우는 정해진 파라미터 순서대로 꼭 값을 넣어줘야한다. 순서를 무시하고 값을 넣으면 에러가 발생하거나 엉뚱한데 값이 들어갈 수 있다.

public Bag(String name, int money, String memo) {
	this.name = name;
    	this.money = money;
    	this.memo = memo;
}

 

하지만 빌더 패턴은 빌더의 필드 이름으로 값을 설정하기 때문에 순서에 종속적이지 않다.

그냥 쓰이는 곳에서 어떤 필드를 먼저 설정해야하는지 굳이 순서를 생각할 필요 없이 편하게 설정하면 된다.

Bag bag = Bag.builder()
		.name("name")
        	.memo("memo")	// memo를 money 대신 먼저!
        	.money(1000)
        	.build();

 

추가적인 장점으로

  • 불필요한 생성자의 제거
  • setter 메서드가 없으므로 변경 불가능한 객체를 만들수 있다. (객체불변성)
  • 한번에 객체를 생성하므로 객체 일관성이 깨지지 않는다.

 

빌더는 사용하는 방법으로 다음과 같이 만들어진다.

- Member 클래스 내부에 빌더클래스 생성.

- 각 멤버 변수별 메서드를 작성, 각 메소드는 변수에 값을 set하고 빌더객체를 리턴한다.

- build() 메서드는 필수 멤버변수의 null체크를 하고 지금까지 set된 builder를 바탕으로 Member 클래스의 생성자를 호출하고 인스턴스를 리턴.

public class Member {

    private String nickname; //필수
    private String password; //필수
    private Gender gender; //선택

    public static class Builder {
        private final String nickname;
        private final String password;
        private Gender gender;

        // 필수변수는 생성자로 값을 넣는다.
        public Builder(String nickname, String password) {
            this.nickname = nickname;
            this.password = password;
        }

        // 멤버변수별 메소드: 빌더클래스의 필드값을 set하고 빌더객체를 리턴한다.
        public Builder gender(Gender gender) {
            this.gender = gender;
            return this;
        }

        // 빌더메소드
        public Member build() {
            return new Member(this);
        }
    }

    public Member(Builder builder) {
        this.nickname = builder.nickname;
        this.password = builder.password;
        this.gender = builder.gender;
    }
}

Member memberEntity = new Builder("minji", "1234")
                .gender(Gender.F)
                .build();

하지만 빌더 패턴도 역시 단점이 존재한다. 객체를 생성하려면 우선 빌더객체를 생성해야 하고, 보다시피 다른 패턴들보다 많은 코드를 요구하기 때문에 인자가 충분히 많은 상황에서 이용할 필요가 있다.

 

아니면 @Builder 을 이용하여 빌더클래스를 직접 만들지 않고 어노테이션 하나로 클래스를 생성할 수 있다.

클래스 또는 생성자 위에 @Builder 어노테이션을 붙여주면 빌더패턴 코드가 빌드된다.

생성자 상단에 선언시 생성자에 포함된 필드만 빌더에 포함된다.

  • 클래스 전체 Builder 적용
@Getter @Builder // ✨ 클래스 전체 필드를 빌더로 사용 가능!
public class UserLombok {

  private Long id;
  private String email;
  private String password;
  private String name;
}

// 사용예제
public User join(String email, String password, String name) {
  UserLombok build = UserLombok.builder()
            .email(email)
            .password(password)
            .name(name)
            .build();
  ...
}
 
 
  • 특정 생성자에서만 Builder 적용 가능
@Getter
public class UserLombok {

  private Long id;
  private String email;
  private String password;
  private String name;
  
  public UserLombok(Long id, String email, String password, String name) {
    this.id = id;
    this.email = email;
    this.password = password;
    this.name = name;
  }

  @Builder // ✨ 빌더는 email, password만 사용 가능
  public UserLombok(String email, String password) {
    this.email = email;
    this.password = password;
  }
}

// 사용예제 - email, password만 가능!
public User join(String email, String password, String name) {
  UserLombok build = UserLombok.builder()
            .email(email)
            .password(password)
            .build();
  ...
}
 

 

 

오늘 공부한 내용

  • 코드카타 2문제
  • Spring 심화 프로젝트 코드작성

 

 

 

오늘의 느낀점

프로젝트의 각자 작성해야하는 코드에 대해 팀원들과 토의를 진행하였는데 API 세분화를 위하여 크게 도메인, 글로벌 2가지 형태로 패키지를 나눈후 도메인안에는 각자 맡아서 작성해야하는 API에대해서 Controller - Service - Repository - Dto - Entity  형태로 패키지를 정리하고, 글로벌 패키지쪽에는 로그인 및 JWT,Config, CommonResponse에 관한 내용으로 구분하여 정리하니 확실히 각 클래쓰에 대한 파일 정리와 구분이 명확해 졌다.

앞으로도 프로젝트 작성시 이러한 형태를 먼저 구상후 시행하면 좀더 빠르고 수월하게 프로젝트를 만들수 있을거 같다.

오늘 공부한 내용

  • 코드카타 2문제
  • Spring 심화 프로젝트 발제
  • SA 작성 / API구상, ERD구상, 와이어프레임 작성, Entity작성
 

[프로젝트] mission-log S.A

Sparta's Spring Notion. Trello를 모티브한 협업툴 프로젝트입니다.

velog.io

// 금일 팀원들과 작성한 SA 구조 이다.

 

오늘의 느낀점

오늘은 스파르타 최종 프로젝트 시행전 마지막으로 진행되는 팀별프로젝트 이다.

이번 프로젝트의 주제는 “프로젝트 협업 도구”인 Trello를 만드는 것이다.

지금 현재 사용하는 노션과 비슷한 구조인데 전체적인 모습을 보니 여태까지 공부해왔던 구조의 완전체 같은 느낌이랄까

이후 팀과 상의하여 이전에 배웠던 Code with me 를 통하여 코드작성간 틀이될 프로젝트 파일을 빠르게 만들었고

와이어 프레임을 기준으로 API를 구상하는 방식으로 시행했다.

확실히 프로젝트 작성간에 팀원과 높은 의사소통을 보이면서 API, ERD, Entity등 막힘 없이 작성 할수 있었다.

이번 프로젝트를 마치면 앞으로 프로젝트를 하는데 있어서 어떻게 구상하고 움직일지에대해 스스로 찾아서 해볼수 있을거 같다.

 

 

 

오늘 공부한 내용

  • 플러스주차 복습과제 작성, 제
  • 코드카타 2문제

 

 

 

 

오늘의 느낀점

 오늘까지 플러스주차 복습과제를 작성하고 제출했다.
이번에는 내스스로 과제를 어느정도 완료하고 제출했다는것에대해 큰의미를 가진다.
어느덧 스파르타 시작한지 2달이 넘어서게 되었다.
처음 스프링을 시작했을때 CRUD에서 api 조차 모르고 postman, github까지 짧은시간동안 개발자로서 필요한것에 대해 무엇인지 많이 알게 되었다.
특히 내 스스로 공부했었다면 반년이 되어도 이수준까지 올라오는거는 힘들지 않았을까 싶다.
끝나는 날까지 열심히 해보자.

오늘 공부한 내용

  • 플러스주차 복습과제 작성
  • 베이직 보충 수업 / 로그인 기능 구현
  • 코드카타 2문제

 

오늘의 느낀점

 이번 복습과제를 하면서 이전에 비해 확실히 CRUD작성시 스스로 작성하고 내가 어디가 문제인지를 파악할수 잇게 되었다.

다만 새로운것에 대해서 좀더 더 많이 찾고 알아야 하는데 복습위주로 로 공부를 하면서 반복 숙달을 위해 과제 중심으로 하다보니 실력이 늘어나기 보다는 오히려 막혀서 성장을 못하고 있는거 아닌가라는 생각이 든다..

 

 

오늘 공부한 내용

  • Spring 심화 영상 시청
  • 베이직 보충 수업 / JWT, Security
  • 코드카타 2문제

 

어려웠던 내용

  •  JWT 와 Security에 대한 구동방식은 이제 이해가 가는거 가지만 이를 crud에 접목해서 하려고하니 응용하는 어떻게 다가설지 모르겠다.

 

 

 

오늘의 느낀점

 오늘 보충 수업을 들으면서 JWT가 어떻게 작동하고 그에 따라 필터를 통해 인증, 인가가 어떻게 이루어지는지 제대로 이해 할수 있었다.
다만 이제 이를 이용해 숙제로 내준 CRUD중 create 부분을 작성해 로그인 까지 구현 하려고 했는데 작성까지는 왔다만 뭔가 잘 안되는거 같다.
CRUD로 회원가입, 로그인, 포스트 목록등 이제 혼자서 만들수 있는데 이를 security에 적용하려고 하니 막막한데 지래 겁먹게 되는거 같다.
개발자가 적는것에 따라 구조가 조금씩 바뀌다 보니 외울려 해도 듀터님은 외우는게 아닌 구조를 이해하라고 하셨는데 좀만더 하면 이제 완전히 할거 같은데좀 답답하다...

오늘 공부한 내용

  • 스프링 심화주차 재시청
  • 코드카타 2문제

 

새로 알게된점

AWS ( Amazon Web Services)

AWS는 일전에 배웠던 Kakao Developers와 비슷한 개발자를 위한 오픈소스 이며 전 세계적으로 분포한 데이터 센터에서 200개가 넘는 완벽한 기능의 서비스를 제공하는, 세계적으로 가장 포괄적이며, 널리 채택되고 있는 클라우드이다. 

 

AWS의 주요 서비스는 다음과 같다.

  • 컴퓨팅: EC2 (Elastic Compute Cloud), Elastic Beanstalk 등
  • 데이터베이스: RDS (Relational Database Service) 등
  • 스토리지: S3 (Simple Storage Service), EBS (Elastic Block Store)등
  • 네트워킹: VPC (Virtual Private Cloud), CloudFront, Route 53 등
  • 보안: IAM (Identity and Access Management)

 

이러한 AWS의 장점과 단점으로는

AWS 의 장점

  • 확장성 : 광범위한 컴퓨팅 리소스에 대한 온디맨드 액세스를 제공하므로 기업이 필요에 따라 IT 인프라를 쉽게 확장
  • 비용 효율성 : AWS 고객은 사용한 리소스에 대해서만 비용을 지불하므로 선불 비용이나 장기 약정 없이 비용 효율적인 솔루션을 제공합니다.
  • 안정성 : 매우 안전하고 안정적인 데이터 센터의 글로벌 네트워크를 운영하여 고가용성 및 재해 복구 기능을 제공
  • 유연성 : 컴퓨팅, 스토리지, 데이터베이스 및 분석을 포함한 광범위한 서비스를 제공, 고객이 다양한 애플리케이션과 서비스를 구축하고 실행
  • 혁신 : 연구 개발에 막대한 투자를 하여 정기적으로 새롭고 혁신적인 서비스와 기능을 출시하고 고객에게 최신 기술에 대한 액세스를 제공
  • 보안 : 고객 데이터를 보호하고 관련 규정을 준수할 수 있도록 다양한 보안 조치 및 인증을 구현
  • 글로벌 도달 범위 : 여러 지리적 지역에 위치한 데이터 센터를 통해 AWS 를 통해 고객은 데이터를 고객과 더 가까운 위치에 저장하여 성능을 개선하고 대기 시간을 줄일 수 있다.

AWS 의 단점

  • 복잡성 : 클라우드 컴퓨팅을 처음 접하는 조직의 경우 관리 및 탐색이 복잡할 수 있는 광범위한 서비스 및 기능을 제공
  • 비용 : 비용 효율적인 솔루션을 제공하지만 사용량이 많거나 특수한 요구 사항이 있는 비즈니스에는 요금 모델이 비쌈
  • 인터넷 의존성 : 안정적이고 빠른 인터넷 연결에 의존하며 모든 중단은 서비스의 성능과 가용성에 영향을 미침
  • 공급업체 종속 : 기업이 AWS 에 투자한 후에는 다른 공급업체로 전환하는 것이 어렵고 비용이 많이 들기 때문에 공급업체 종속이 발생
  • 보안 문제 : 다양한 보안 조치를 구현하지만 클라우드에 중요한 데이터를 저장하는 것과 관련된 보안 위험과 우려가 여전히 존재
  • 통제력 부족 : AWS 고객은 기본 인프라와 서비스를 관리하고 유지하기 위해 Amazon 을 신뢰해야 하며, 이로 인해 IT 리소스에 대한 통제력과 가시성이 줄어들 수 있다.

 

느낀점

이전에 배웠던 오픈소스중 Kakao Developers와는 다르게 더욱더 많은 기능을 가지고 있어서 영상을 보면서도 잘 와닿이 않았다.

실제로 현업에 가면 다양한 오픈소스를 이용하여 작업을 실시 할것이고 듀터님 말씀으로는 이를 다 암기하는 사람은 없으며 대부분 가져와서 적용하는 것이라고 하는데 정말 공부하면 할수록 편한것들이 많아지는 반면 이에따라 점점 복잡하고 다양한 기능이 생겨나니 정말 끊임없이 배워야 할거 같다.

+ Recent posts