시작을 빠르게
우선 마지막 시험을 통해서 기본적인 API를 시간내에 작성해보는 테스트가 진행되었다.
어떻게보면 처음 배울때보다 많이 발전했지만 아직도 완벽하게 이해하지 못한 부분이 많고 계속해서 익숙해지는 것이 필요하다.
나는 보다 많은 발전을하고자 챌린지팀에 참가하게되었다. 물론 많은 고민이 있었고 현실적인 문제도 있었지만, 충분히 극복하고 역량을 끌어 올리고 싶다. 꼭 도전해보고 계속해서 성장 기울기를 높이고 싶다.
이번 주 팀프로젝트가 시작되었다.
많은것들을 느끼고있고, 최선을 다하고 있다. 아직 팀프로젝트 시작한지 2일밖에 되지 않았지만, 내가 집중적으로 한것과 경험한것들은 다음과 같이 정리된다.
•
백엔드 3인팀인 것을 고려하여 최대한 스스로 프론트엔드 메인 구조를 구성하고 프로젝트 기획과 시작 단계의 기초를 마련하는데 신경썼다.
•
초기에는 업무 분담의 착오와 순서를 정하지 않아 짧게 혼란이 있었지만 빠르게 적응하고 유연하게 대처했다.
•
프론트엔드와 백엔드를 동시에 담당하려 했으나, 시간 관리의 어려움이 예측되고 균등한 학습을 위해서 일부 업무들을 분산했다.
•
기초 와이어프레임을 계획하고, 메인페이지에 대한 사전 계획을 세워두었다.
•
리뷰(Review) API를 CRUD(Create, Read, Update, Delete) 기능으로 구현하고 테스트했다.
•
변경되는 부분에 대한 보고와 설명을 진행하여 팀원 간의 커뮤니케이션을 개선하고자 노력하고 있다.
업무 분담, 시간 관리, 커뮤니케이션, 코드 리팩토링 등 다양한 역량을 향상시키고 싶다. 단순히 마구잡이로 진행하는 것보다 조금 규칙적이고 가상 실무를 경험하는 것 처럼 진지하게 또한 빨리 천천히를 시도해보고 있다.
팀원들을 배려하자.
나는 시간을 녹이는 스타일이다. 기본적으로 책상에 앉아있는 시간이 많다. 뭐 공부에 대한것도 있지만, 기본적으로 컴퓨터와 거의 한몸처럼 지내는 것이 나에겐 휴식이기도 일이기도하다.
하지만 팀은 다르다. 실제로 허리도 아프기도하고, 워라밸 가치를 중요시하는 사람도 있으며, 휴식으로 충분히 리프레쉬가 필요한 사람도 있다. 이런 개인적 성향차이를 이해하고 나의 마음대로 푸시하면 안된다. 바쁜것은 맞지만, 팀이기 때문에 배려하고 이해해야 한다. 충분한 휴식 시간을 제공하고, 나 또한 번아웃을 막기위해 쉴땐 쉬어야 한다. 나도 초인이 아니다. 그저 욕심과 의지와 끈기가 나를 지배하는 것이지 실제론 힘듦이라는 것을 열정으로 나조차 속이고 있다. 주변을 바라보는것을 잊지말자, 멀리 볼 줄도 알아야 한다. 이미 충분히 나는 너무 많은것을 동시에 하고 있고 끈질기게 계속하면 된다.
배울것이 많다.
아직도 부족한 부분들이 많다. 훑어보면서 지나친것들, 개념적으로 흔들리는 것들. 계속해서 나타난다. 하지만 하나씩 경험하면서 늘어날 것이라고 믿고있다. 선배들이 프로젝트라던지 직접 코드를 살펴보면서 익숙해질것이라는 것이 와닿고있다.
이제 조금 깊은 지식들을 배우기 시작한다. 처음 스프링을 시작했을때가 생각난다. 무조건 성장할 수 있다. 동료에게 많은것을 배우자. 나 또한 많은 것을 공유하고 도와주자. 서로의 강점을 최대한 활용하고 팀의 목표를 함께 달성해야 한다. 나는 프로젝트 완성도를 높이고 싶은 욕심이 크다.
자기 전에 CORS는 뭘까? 궁금해졌다.
예전에 트러블 슈팅하다가 마주했던 기억이 있다. 당시 해당 문제를 해결하는데 잠깐 이 키워드가 등장했었고, 하지만 관련이 없는 부분으로 판단되고 해결되어서 지나치게 되었다.
나는 새로운것을 배울 때 나를 이해시킬 정도의 간단한 묘사가 필요했다.
CORS(Cross-Origin Resource Sharing)는
웹 애플리케이션에서 다른 도메인(Origin)으로부터 리소스를 요청하는 보안 정책을 말합니다.
CORS는 기본적으로 브라우저에서 적용되며, 웹 페이지가 다른 도메인에서 데이터를 가져오거나 요청할 때 보안 문제를 방지하기 위해 사용됩니다.
→ 맞다, 당시 요청에서 오류가 발생했고 이 부분을 체크하라는 답변도 있었다.
시나리오:
1.
웹 페이지 A가 도메인 example.com에서 호스팅되고 있습니다.
2.
웹 페이지 A에서는 도메인 api.example.com에 위치한 서버에서 데이터를 가져오려고 합니다.
CORS 적용 전:
웹 페이지 A에서 XMLHttpRequest 또는 Fetch API를 사용하여 api.example.com로 데이터를 요청하면, 브라우저는 보안 상의 이유로 이 요청을 차단합니다. 이는 기본적인 브라우저 정책입니다.
CORS 적용 후:
서버에서 CORS 헤더를 설정하여 api.example.com에서 오는 요청을 허용하면, 브라우저는 이 요청을 허용하고 데이터를 반환합니다.
→ 특정 URL의 요청을 허용하는 기능이 있구나.(Security에서도 권한을 설정하는 것이 있던데 뭔차이지.. 접근과 데이터요청의 차이인가?)
SpringBoot에서 CORS 설정 예시 1 @CrossOrigin 애노테이션
Spring Boot 백엔드에서 CORS를 설정하는 예시를 제공해 드리겠습니다. Spring Boot는 @CrossOrigin 애노테이션을 사용하여 CORS 정책을 설정할 수 있습니다.
그리고 MyData 클래스는 응답으로 보낼 데이터가 있다고 가정하자.
public class MyData {
private String message;
// getter와 setter 메서드 생략
}
Java
복사
다음과 같이 컨트롤러에서 CORS를 설정 하게 된다.
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/api")
public class MyController {
@GetMapping("/data")
@CrossOrigin(origins = "http://example.com") // 원하는 도메인을 여기에 지정
public MyData getData() {
MyData data = new MyData();
data.setMessage("Hello, CORS is configured!");
return data;
}
}
Java
복사
또 다른 방법
SpringBoot에서 CORS 설정 예시 2 WebMvcConfigurer를 구현
Spring Boot 애플리케이션에서 CORS를 활성화하려면 WebMvcConfigurer를 구현하고 다음과 같이 설정할 수도 있습니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("Content-Type", "Authorization")
.allowCredentials(true);
}
};
}
}
Java
복사
위의 코드는 /api/** 경로로 들어오는 모든 요청에 대해 CORS를 설정하며, 특정 도메인(http://example.com)에서 오는 요청을 허용하고 필요한 메서드와 헤더를 설정하도록 합니다.
이러한 설정을 추가하면 Spring Boot 애플리케이션에서 CORS 문제를 해결할 수 있습니다.
또또 다른 방법!!
Spring Security와의 관계는?
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors() // CORS 설정을 활성화
.and()
.authorizeRequests()
.antMatchers("/api/public/**").permitAll() // 특정 엔드포인트에 대한 퍼미션 부여
.antMatchers("/api/private/**").authenticated() // 인증된 사용자만 접근 가능한 엔드포인트
.and()
.httpBasic(); // HTTP 기본 인증 사용
}
}
Java
복사
SecurityConfig 익숙한 부분이 나온다.
여기서도 .cors()로 활성화 할 수 있구나. .and()로 두개를 동시에 관리할 수 있구나.
citeFred :
아 그럼 예전에 내가 적용했던거는 인증으로 접근에대한거였다면, cors()까지 사용하면 인증접근과 데이터요청까지 추가되는거야?
ChatGPT :
네, 맞습니다. cors() 메서드를 Spring Security 설정에 추가하면 인증 접근 및 데이터 요청에 대한 CORS(Cross-Origin Resource Sharing) 정책을 설정할 수 있습니다. 이렇게 설정하면 다음과 같은 상황을 다룰 수 있습니다:
1.
인증된 접근 (Authentication Access): Spring Security를 사용하여 특정 엔드포인트를 인증 접근으로 보호할 수 있습니다. 즉, 특정 엔드포인트에 대한 액세스를 인증된 사용자에게만 허용할 수 있습니다.
2.
CORS 설정 (CORS Configuration): cors() 메서드를 사용하여 CORS를 설정하면, 인증된 사용자가 인증된 웹 애플리케이션에서 다른 도메인으로부터 리소스를 요청할 때 CORS 정책을 정의할 수 있습니다. 이것은 허용되는 도메인, 메서드, 헤더 등을 구체적으로 설정하는 데 사용됩니다.
예를 들어, Spring Security를 사용하여 RESTful API를 보호하고 cors()를 활성화한 경우, 특정 엔드포인트에 대한 인증된 접근과 해당 엔드포인트로부터의 CORS 설정을 함께 다룰 수 있습니다. 이로써 인증된 사용자만이 해당 엔드포인트에 액세스할 수 있고, CORS 정책을 사용하여 다른 도메인에서의 요청을 제어할 수 있습니다.