프로젝트를 위해 api 개발하는법을 공부하던 중
다음과 같이 GetMapping 어노테이션으로 GET 요청을 처리하려고 시도중이었다.
@Controller
public class ShopController {
@GetMapping("/shopInfo") // 이곳으로 들어오는 API주소를 mapping, GET(조회)
@ResponseBody
public String shopInfo(@RequestParam("shopId") String shopId) {
ShopInfo shopInfo = new ShopInfo();
shopInfo.setShopId(shopId); //파라미터로 넘어온 shopName을 넣음
return shopInfo.shopId;
}
static class ShopInfo {
private String shopId;
public String getShopId() { //꺼낼떄
return shopId;
}
public void setShopId(String shopId) { //넣을떄
this.shopId = shopId;
}
}
}
/shopInfo로 들어온 shopId value값을 받아 그대로 리턴되도록 하는 간단한 코드임에도 불구하고 (코드가 잘못된줄 알았다)
postman상에서 다음과 같은 에러메시지가 떴다.
에러메시지를 그대로 복사해서 구글링해봤는데,
웹사이트에서는 send request가 안된단다.
postman 웹버전 말고 데스크탑 버전을 사용하면 해결될 것이라고 되어 있었다.
그래서 다운받아 이용했는데 이번에는 다른 에러가 났다.
error: write eproto 140695710412152:error:100000f7:ssl routines:openssl_internal:wrong_version_number:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:242:
위와같은 에러 메시지가 떴었다.
마찬가지로 고대로 구글링했더니 https가 아니라 http로 수정하면 해결된단다.
그랬더니 잘 받아지더라. ..생각치도 못한 이유였다!
이참에 http와 https 프로토콜의 차이에 대하여 공부해보기로 한다.
HTTP / HTTPS
HTTP(Hyper Text Transfer Protocol)란 서버/클라이언트 모델로 데이터를 주고 받기 위한 프로토콜이며,
통신규약으로 80번 포트를 사용하고 상태를 가지고 있지 않은 Stateless 프로토콜이다.
암호화가 되지 않은 데이터를 전송하는 프로토콜이기에 HTTP로 비밀번호나 개인정보를 주고받으면 제3자가 정보를 조회할 수 있다는
보안부분의 취약점이 발생할 수 있었다.
반면, HTTPS(Hypertext Transfer Protocol Secure)프로토콜은 HTTP의 보안 취약점을 개선하기 위해
SSL(Secure Socket Layer) 인증서를 이용해서 문제를 해결하였다.
SSL은 서버와 브라우저 사이의 오가는 데이터들을 암호화하여 전송되도록 함으로써,
서버 브라우저를 통해 개인정보와 같은 민감한 정보를 주고받을 때 데이터가 노출되어 악용될 위험을 막아준다.
또한 HTTPS는 TLS(전송 계층 보안) 프로토콜을 통해서도 보안을 유지하고 있다.
TSL은 데이터 무결성(데이터의 정확성, 유효성, 일관성)을 제공하기 때문에 데이터가 전송 중에 수정되거나 손상되는 것을 방지하고
사용자가 자신이 의도하는 웹사이트와 통신하고 있음을 입증하는 인증 기능도 제공하고 있다.
보안성 측면 뿐만 아니라 https는 검색엔진 최적화(SEO)에 있어서도 장점을 갖는다고 한다.
따라서 구글에서는 모든 웹사이트에 대해 가능한 https를 권장한다고 한다.
다만 요즘엔 큰 차이는 없지만 https가 암호화, 복호화 과정이 들어가기 때문에
아무래도 속도나 유지면에서 http보다 추가비용이 발생 할 수는 있겠다.!
그래서 왜 내 postman에서 https가 안먹혔을까?
속시원한 검색결과를 찾지는 못했지만(네트워크 관련 과목을 수강했음에도 불구하고 내가아직 배경지식이 부족한 탓일까 ..)
로컬 환경에서 작동시키고 있기 때문에 ssl 인증서를 사용하는 https가 통하지 않기 때문일 것으로 추측하고있다. :0
'Database' 카테고리의 다른 글
[Server] AWS ec2 인스턴스 생성/ssh 접속방법(ubuntu) (0) | 2022.08.19 |
---|---|
[DB] RDS란?/RDS로 MySQL DB 인스턴스 생성하기 (0) | 2022.08.15 |
[MySQL/DB] auto_increment가 뭘까? (0) | 2022.08.11 |