2021-05-23-TIL
2021-05-23-TIL
Q. 테스트 코드로 insert한 결과는 db에 반영이 안되는가?
CORS 문제
리액트로 실행되는 프론트 서버는 localhost:3000
주소를 사용하는데, JSON 데이터를 받아오는 서버가 AWS의 주소이므로 서로 오리진이 달라서 발생하는 문제이다. 이는 iOS에서는 발생하지 않으며, 프론트는 자체 서버가 구동되므로 발생하는 문제이다. 이 문제를 해결하기 위해서 임시적으로 @CrossMapping
을 각 컨트롤러에 붙여주면 된다. 나중에 배포할 때는 이것을 제거하고 프론트 서버와 함께 배포하면 된다.
결론: 개발할 때는 @CrossMapping으로 배포하고, 나중에 프론트 서버랑 합칠 때는 애노테이션 빼고 프론트 서버는 Ngnix에, 백엔드 서버는 Tomcat에 올리면 된다.
@Transactional
1
2
3
4
5
@SpringBootTest
@Transactional
class RoomRepositoryTest {
...
}
테스트 코드의 클래스에 아무 생각없이 붙였던 @Transactional
애노테이션은 해당 테스트 코드 전체를 트랜잭션으로 보고, 별도의 커밋을 수행하지 않으면 롤백하도록 해준다. 따라서 해당 애노테이션을 없애고 Insert 쿼리를 수행하면 DB에 해당 데이터가 저장되는 것을 확인할 수 있다.
1
2
3
Executing prepared SQL statement
...
Rolled back transaction for test: [DefaultTestContext@3aaca039 testClass = RoomRepositoryTest, testInstance = ...
@Transactional
을 붙이면 해당 로그가 출력되는데, 트랜잭션 커밋이 이루어지지 않아서 다시 롤백하는 로그가 출력된다. 테스트 코드는 테스트일 뿐이므로 롤백하는 것이 타당해보인다.
TODO
- VPC 설정
- 배포 자동화
- OAuth 적용
- Ngnix 설정 및 프론트서버 배포
This post is licensed under CC BY 4.0 by the author.