OAuth 가 무엇이고, OAuth 플로우에 대해 설명해주세요.
OAuth는 아이디나 패스워드를 이용하지 않고, 구글, 카카오와 같이 타서비스에 등록된 정보를 이용하여 인증, 인가를 하는 것을 의미합니다. OAuth를 하기 위해서는 먼저 해당 서비스에 인가 코드를 받을 리다이렉션 위치(URL)을 등록해주어야 합니다. 또한, 인가를 위해 Client Public Key 와 Secret Key를 발급받습니다. 우리가 Google로 로그인하기, 카카오로 로그인하기, Github로 로그인하기와 같은 버튼을 누르게 되면, 해당 서비스에서 제공하는 로그인 화면이 보여집니다. 이것을 Resource Owner 이라고 하는데, Resource Owner 을 통해 로그인하여 인증을 완료하게 되면, 등록해놓은 리다이렉션 위치로 새로고침이 되며, 파라미터로 Authorization Token을 전달받을 수 있습니다. 이 인가코드를 API로 전달하게 되면, access Token 을 발급 받을 수 있습니다. access token이 만료된다면, refresh token을 통해 access token을 갱신 할 수 있습니다.
String vs String Builder vs String Buffer
String 과 String Builder, String Buffer 의 차이는 불변성입니다. String 으로 선언한 변수는 변하지않습니다. 만일 A, B라는 String 변수가 있을 때 A+B를 하게 된다면, A+B는 A, B 둘 중 어느 것의 변수를 바꾸는 것이 아닌 새로운 주소를 할당받아 새로운 변수를 만듭니다. 따라서, String을 많이 쓰게 된다는 것은 그만큼 힙에 사용하지 않는 Garbage가 존재하게 된다는 것을 의미합니다. String Builder 와 String Buffer는 같은 메모리를 쓰기 때문에, 불필요한 Garbage가 생성되지 않습니다. 하지만, String Buffer는 Thread-safe하기 때문에, String 과 같이 멀티쓰레드 환경에서 이점이 있습니다. 단, 속도가 느리다는 단점이 있습니다. String Builder는 Non-Thread-safe 하지만, 속도가 빨라 단일스레드 환경에서 주로 쓰인다고 합니다.