Top 10 REST Interview Questions for Java and Spring Developers(Java์ Spring ๊ฐ๋ฐ์๋ฅผ ์ํ 10๊ฐ์ REST ๋ฉด์ ์ง๋ฌธ)
๐ก ์๋ณธ๊ธ
Top 10 REST Interview Questions for Java and Spring Developers
์ฌ๋ฌ๋ถ ์๋ ํ์ธ์. Java, Spring ๊ฐ๋ฐ์ ๋ฉด์ ์ ์ค๋นํ๊ณ ์์ผ๋ฉฐ Spring REST ๋ฉด์ ์ง๋ฌธ์ ์ฐพ๊ณ ๊ณ์ ๋ค๋ฉด ์ด ๊ธ์ ์ ์ฐพ์์์ต๋๋ค.
์ด์ ์, ์ ๋ Spring ๊ฐ๋ฐ์ ๋ฉด์ ์ ์ํด ์ค๋นํด์ผ ํ 13๊ฐ์ง ํ์ ์ฃผ์ ์ Spring Framework, Spring MVC, Spring Security, Spring Data JPA, Spring AOP, Spring Boot, Spring Test, Hibernate, Spring Boot Actuator, Spring Cloud, Microservices ๋ฑ ๋ค์ํ ์ฃผ์ ์ ๋ํด ๋ง์ ์ง๋ฌธ์ ๊ณต์ ํ์ต๋๋ค. ์ด ๊ธ์์๋ Spring Framework์์ REST API๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ๊ณผ REST์ ๊ดํด ์์ฃผ ๋ฌป๋ ์ง๋ฌธ์ ๋ํด ๊ณต์ ํ ์์ ์ ๋๋ค.
์ด ๊ธ์ ๋ชจ๋ REST ๊ด๋ จ ์ง๋ฌธ์ ํฌ๊ดํ๋ ๊ฒ์ ์๋์ง๋ง, Spring Professional ์ธ์ฆ ๊ฐ์ด๋์์ ๊ฐ์ ธ์จ ์ง๋ฌธ์ ํฌํจํ์ฌ ํ์์ ์ธ REST ๊ฐ๋ ๋ค์ ๋ค๋ฃน๋๋ค.
๋ง์ฝ ๋ฉด์ ์ ๋น ๋ฅด๊ฒ ์ฐธ์ฌํด์ผ ํ๋ค๋ฉด, ์ด REST ์ง๋ฌธ ๋ชฉ๋ก์ ๋น ๋ฅด๊ฒ ํ์ด๋ณด์๋ ๊ฒ๋ง์ผ๋ก๋ 5๋ถ ์ด๋ด์ ์ฝ๊ณ ์ดํดํ ์ ์์ต๋๋ค.
์๊ฐ์ด ๋ ์๋ค๋ฉด ์ ์ ์ฑ “Grokking the Spring Interview”๋ฅผ ํ์ธํด๋ณด์ธ์. ์ด ์ฑ ์์๋ ๋ค์ํ Spring ์ฃผ์ ์ ๋ํด 200๊ฐ ์ด์์ ์ง๋ฌธ์ ๋ ผ์ํ์ต๋๋ค. ๋ํ friends20์ฝ๋๋ฅผ ์ฌ์ฉํ๋ฉด 20$ ํ ์ธ์ ๋ฐ์ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก, Spring์ด ์ฒ์์ด๊ณ Spring ๊ฐ๋ ์ ๊ตฌ์ถํ ์ต๊ณ ์ ๊ฐ์๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด Undemy์ Spring and Hibernate for Beginners(includes Spring Boot)๋ฅผ ์ ๊ทน ์ถ์ฒํฉ๋๋ค. ์ด ๊ฐ์๋ก Spring, Hibernate, Spring Boot ์ธ๊ฐ์ง ๋ชจ๋ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
Java์ Spring ๊ฐ๋ฐ์๋ฅผ ์ํ 11๊ฐ์ง REST ๋ฉด์ ์ง๋ฌธ
๋ ์ด์ ์๊ฐ์ ๋ญ๋นํ์ง ์๊ณ , Java์ Spring ๊ฐ๋ฐ์ ๋ฉด์ ์์ ์์ฃผ ๋ฌป๋ REST ๋ฉด์ ์ง๋ฌธ๋ค์ ์๊ฐํ๊ฒ ์ต๋๋ค. ์ด ์ง๋ฌธ๋ค์ REST API, REST ๊ฐ๋ ๋ฐ REST ์ํคํ ์ฒ์ ๋ํ ์ง์์ ํ ์คํธ ํฉ๋๋ค.
์ง๊ธ๊น์ง ์ฐ๋ฆฌ๋ Spring MVC์ ์ค์ ์ ๋ Spring ๋ฉด์ ์ง๋ฌธ์ ์ดํด๋ณด์๊ณ , ์ด์ Spring MVC ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ RESTful ์น ์๋น์ค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ REST ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ช๊ฐ์ง ์ง๋ฌธ์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.
1. REST๋ ๋ฌด์์ ์๋ฏธํฉ๋๊น?
REST๋ Representational State Transfer์ ์ฝ์๋ก ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์๋ฒ๋ฅผ ๋ฐ์ดํฐ๋ก ๋ณด๋ด๋ ๋ฐ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์๋ฒ์์ ๋ฐ์ดํฐ JSON, XML์ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ REST์ ์ต์ํ์ง ์๋ค๋ฉด ๋จผ์ REST API ๋์์ธ ๋ฐ ๊ฐ๋ฐ์ ํ์ธํ์ฌ ์ด์ ๋ํด ๋ ์ ์ดํดํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
2. ๋ฆฌ์์ค๋ ๋ฌด์์ ๋๊น?
๋ฆฌ์์ค๋ REST ์ํคํ ์ฒ์์ ๋ฐ์ดํฐ๋ฅผ ํํํ๋ ๋ฐฉ์์ ๋๋ค. ์ํฐํฐ๋ฅผ ๋ฆฌ์์ค๋ก ๋ ธ์ถํจ์ผ๋ก์จ ํด๋ผ์ด์ธํธ๊ฐ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์ฝ๊ณ (GET), ์์ฑํ๊ณ (POST), ์์ ํ๊ณ (PUT), ์ญ์ (DELETE) ๋ฑ์ ํ ์ ์์ต๋๋ค.
3. ์์ ํ REST ์์ ์ด๋ ๋ฌด์์ ๋๊น?
REST API๋ ์์ ์ ์ํํ๊ธฐ ์ํด HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ ํ์ง ์๋ HTTP ์์ ์ ์์ ํ ์์ ์ผ๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, GET๊ณผ HEAD๊ฐ ์ฌ๊ธฐ์ ํด๋น๋ฉ๋๋ค. ๋ฐ๋ฉด์ PUT, POST, DELETE๋ ์๋ฒ์ ๋ฆฌ์์ค๋ฅผ ์์ ํ๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์์ต๋๋ค.
4. ๋ฉฑ๋ฑ์ฑ ์์ ์ด๋ ๋ฌด์์ด๋ฉฐ, ์ ๋ฉฑ๋ฑ์ฑ์ด ์ค์ํฉ๋๊น?
์ผ๋ถ HTTP ๋ฉ์๋๋ GET๊ณผ ๊ฐ์ด ๋ช๋ฒ์ ์ฌ์ฉํด๋ ๊ฐ์ ์๋ต์ ์์ฑํ๋ฏ๋ก, ๋์ผํ URI์ ์ฌ๋ฌ๋ฒ GET ์์ฒญ์ ๋ณด๋ด๋ฉด ๋ถ์์ฉ ์์ด ๋์ผํ ์๋ต ๊ฒฐ๊ณผ๋ก ์ป์ต๋๋ค. ์ด๋ฅผ ๋ฉฑ๋ฑ(idempotent)๋ผ๊ณ ํฉ๋๋ค.
๋ฐ๋ฉด์ POST๋ ๋ฉฑ๋ฑ์ด ์๋๋๋ค. ์ฌ๋ฌ POST ์์ฒญ์ ๋ณด๋ด๋ฉด ์๋ฒ์์ ์ฌ๋ฌ ์์์ด ์์ฑ๋๊ธฐ ๋๋ฌด์ ๋๋ค. ๊ทธ๋ฌ๋ PUT์ ๋ฉฑ๋ฑ์ ๋๋ค. PUT์ ์ฌ์ฉํ์ฌ ์์์ ์ ๋ฐ์ดํธ ํ๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ฒ PUT ์์ฒญ์ ๋ณด๋ด๋ ์ต์ข ๊ฒฐ๊ณผ๊ฐ ๋์ต๋๋ค.
์ฌ๋ฌ๋ฒ์ PUT ์์ฒญ๋ ์๋ฒ์ ์์์ ์ ๋ฐ์ดํธํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ๊ฐ์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํฉ๋๋ค. HTTP ํ๋กํ ์ฝ์ ๋ฉฑ๋ฑ ๋ฉ์๋์ HTTP ์ผ๋ฐ์ ๋ํด ๋ ๋ฐฐ์ฐ๊ณ ์ถ๋ค๋ฉด Pluralsight์ HTTP ๊ธฐ์ด ๊ณผ์ ์ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
5. REST๋ ํ์ฅ์ฑ์ด ์๊ณ ์ํธ ์ด์ฉ ๊ฐ๋ฅํ๊ฐ์?
๋ค. REST๋ ํ์ฅ ๊ฐ๋ฅํ๊ณ ์ํธ ์ด์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์๋ฒ ์ธก์์ ํน์ ๊ธฐ์ ์ ์ง์ ํ์ง ์์ต๋๋ค. RESTful ์น ์๋น์ค๋ฅผ ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์์ ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด Java, C++, Python, JavaScript ๋ฑ ๋ชจ๋ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค. REST API์ ๋ํด ๋ ๋ฐฐ์ฐ๊ธฐ ์ํด์๋ RESTful ์น ์๋น์ค์ ๊ฐ์ ์ข์ ์ฑ ์ ์ฝ์ด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
6. REST์์ ์ฌ์ฉํ๋ HTTP ๋ฉ์๋๋ ๋ฌด์์ธ๊ฐ์?
REST๋ ๋ชจ๋ HTTP ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๋ฉ์๋๋ ์์์ ์กฐํํ๋ GET, ์์์ ์์ฑํ๋ POST, ์์์ ์ ๋ฐ์ดํธํ๋ PUT, ์์์ ์ ๊ฑฐํ๋ DELETE ์ ๋๋ค.
7. REST๋ ์ผ๋ฐ์ ์ผ๋ก stateless(๋ฌด์ํ)์ธ๊ฐ์? (์ ๋ต)
๋ค. REST API๋ HTTP๊ฐ ๊ทธ๋ฌํ๋ฏ stateless(๋ฌด์ํ)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. REST API์์์ ์์ฒญ์ ๊ทธ๊ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํ์ํ ๋ชจ๋ ์ธ๋ถ์ฌํญ์ ํฌํจํด์ผ ํฉ๋๋ค.
์ด์ ๋๋ ๋ค์ ์์ฒญ ๋๋ ์๋ฒ ์ธก์์ ์ ์ง๋๋ ์ผ๋ถ ๋ฐ์ดํฐ(์ธ์ ๋ฑ)์ ์์กดํด์๋ ์๋ฉ๋๋ค.
REST ์ฌ์์ stateless(๋ฌด์ํ)๋ฅผ ์ ์ฝ์กฐ๊ฑด์ผ๋ก ๋๊ณ ์์ผ๋ฉฐ, REST API๋ฅผ ์ค๊ณํ ๋ ์ด๋ฅผ ์ผ๋ํด ๋์ด์ผ ํฉ๋๋ค.
8. ์ฑ๊ณต์ ์ธ DELETE ์์ฒญ์ ๋ํ HTTP ์ํ ๋ฐํ ์ฝ๋๋ ๋ฌด์์ธ๊ฐ์? (์ ๋ต)
์ฑ๊ณต์ ์ธ DELETE ํ์ REST API๊ฐ ๋ฐํํด์ผ ํ ์ํ ์ฝ๋์ ๋ํ ์๊ฒฉํ ๊ท์น์ ์์ต๋๋ค. 200 Ok ๋๋ 204 No Content๋ฅผ ์๋ตํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก, DELETE ์์ฒญ์ด ์ฑ๊ณต์ ์ด๊ณ ์๋ต ๋ณธ๋ฌธ์ด ๋น์ด ์์ผ๋ฉด 204 No Content๋ฅผ ๋ฐํํฉ๋๋ค. ์๋ต ๋ณธ๋ฌธ์ด ๋น์ด ์์ง ์๋ค๋ฉด 200 Ok๋ฅผ ๋ฐํํฉ๋๋ค.
๋ง์ฝ REST API ๊ฐ๋ ๊ณผ ํ์ค์ ๋ํด ๋ ์์๋ณด๊ณ ์ถ๋ค๋ฉด Udemy์์ ์ ๊ณตํ๋ REST API ๋์์ธ, ๊ฐ๋ฐ ๋ฐ ๊ด๋ฆฌ ๊ฐ์์์ ํ์ธ ํ ์ ์์ต๋๋ค.
9. CRUD๋ ๋ฌด์์ธ๊ฐ์?
CRUD๋ ์์ฑ(Create), ์ฝ๊ธฐ(Read), ์์ (Update), ์ญ์ (Delete)์ ์ฝ์ด์ ๋๋ค. REST API์์๋ POST๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์์ฑํ๊ณ , GET์ ์ฌ์ฉํ์ฌ ์์์ ์ฝ์ผ๋ฉฐ, PUT์ ์ฌ์ฉํ์ฌ ์์์ ์์ ํ๊ณ , DELETE๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ ๊ฑฐํฉ๋๋ค. ์ด ์ง๋ฌธ์ 1๋ ์์ 3๋ ์ ๋ ๊ฒฝํ์ด ์๋ ํ๋ก๊ทธ๋๋จธ์ค ์ฌ์ด์์ ํํ ๋์ค๋ ์ด๊ธ ๋ ๋ฒจ์ Spring MVC ์ง๋ฌธ ์ค ํ๋ ์ ๋๋ค.
10. REST๋ ์์ ํ๊ฐ์? ์ด๋ป๊ฒ ๋ณด์์ ๊ฐํํ ์ ์๋์? (๋ต๋ณ)
์ด ์ง๋ฌธ์ ์ฃผ๋ก REST์ Spring์ ๋ํ 2๋ ์์ 5๋ ์ฌ์ด์ ๊ฒฝํ์ ๊ฐ์ง ๊ฒฝํ ๋ง์ Java ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ์์ฃผ ๋ฌป์ต๋๋ค. ๋ณด์์ด๋ ์ฉ์ด๋ ๋์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ ๋ฉ์์ง์ ๋ณด์์ ์ํธํ๋ก ์ ๊ณตํ๊ฑฐ๋ ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ๋ฅผ ์ฌ์ฉํ ์ ๊ทผ ์ ํ์ผ๋ก ์ ๊ณตํ ์ ์์ต๋๋ค.
REST๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณด์์ด ๊ฐํ๋์ด ์์ง ์์ง๋ง, Spring Security๋ฅผ ์ฌ์ฉํ์ฌ ๋ณด์์ ๊ฐํํ ์ ์์ต๋๋ค. ์ต์ํ Spring Security ์ค์ ํ์ผ์์ HTTP๋ฅผ ์ฌ์ฉํ์ฌ HTTP ๊ธฐ๋ณธ ์ธ์ฆ์ ํ์ฑํ ํ ์ ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ธฐ๋ณธ ์๋ฒ๊ฐ HTTPS๋ฅผ ์ง์ํ๋ค๋ฉด HTTPS๋ฅผ ์ฌ์ฉํ์ฌ REST API๋ฅผ ๊ณต๊ฐํ ์ ์์ต๋๋ค.
11. REST๋ ์ ์ก ๊ณ์ธต ๋ณด์(TLS)๊ณผ ํจ๊ป ์๋ํ๋์? (๋ต๋ณ)
์ ์ก ๊ณ์ธต ๋ณด์(TLS)์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์์ ํ ํต์ ์ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ SSL(๋ณด์ ์์ผ ๊ฒ์ธต)์ ํ์ ๊ธฐ์ ์ ๋๋ค. HTTPS๊ฐ SSL๊ณผ TLS ํจ๊ป ์๋ํ ์ ์๊ธฐ ๋๋ฌธ์ REST๋ TLS์ ํจ๊ป ์๋ํ ์ ์์ต๋๋ค.
์ฌ์ค, REST์์๋ ๋ณด์ ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๊ฒ์ด ์๋ฒ์ ๋ฌ๋ ค ์์ต๋๋ค. ์๋ฒ๊ฐ SSL์ ์ง์ํ๋ค๋ฉด, ๊ฐ์ RESTful ์น ์๋น์ค์ HTTP์ HTTPS๋ฅผ ํตํด ์ ๊ทผํ ์ ์์ต๋๋ค.
Tomcat์ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด, Tomcat์์ SSL์ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์ ๋ณผ ์ ์์ต๋๋ค.
์ด์์ผ๋ก ์ด๋ณด์์ ๊ฒฝํ ๋ง์ Java JEE ๊ฐ๋ฐ์๋ฅผ ์ํ ์์ฃผ ๋ฌป๋ Spring REST ๋ฉด์ ์ง๋ฌธ์ ๋ํด ์์๋ณด์์ต๋๋ค. ์ด ์ง๋ฌธ๋ค์ VMware์ Spring ์ ๋ฌธ๊ฐ ์ธ์ฆ์ ์ค๋นํ๋ ๊ฒฝ์ฐ์๋ Spring REST์ ๋ํ ์ง์์ ๋ค์ ํ์ธํ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๋ ๋ค๋ฅธ Spring ์๊ฐ ๋ฐ ๋ฉด์ ์ง๋ฌธ์ ์๋์ ๊ฐ์ต๋๋ค.
- Spring Boot + Kafka Examples for Beginners
- Spring Boot + Hibernate Example in Java
- How to @Autowired annotation work in Spring
- 15 Spring Data JPA Interview Questions with Answers
- How Spring MVC works internally?
- Top 10 Courses to Learn Microservices with Spring Boot
- How to log SQL Statement with Spring Boot?
- 10 Best Spring Framework Courses for Beginners
- 20+ Spring Boot Interview Questions for Java developers
- Spring Boot + REST API Example in Java
- Top 15 Microservice Interview Questions with Answers
- How to enable Spring security in a Java web application?
- 13 Spring Boot Actuator Questions for interviews
- How to fix no qualifying bean error in Spring
- 15 Spring Cloud Interview Questions with Answer
- 20 Spring Boot Testing Interview Questions with Answers
- 10 Advanced Spring Boot Courses for Experienced Developers
- 5 Best Courses to learn Spring Batch for Java
- 17 Spring AOP Interview Questions with Answers
- How to get ServletContext object in Spring controller
- Difference between @RestController and @Controller in Spring MVC?
์ด ๊ธ์ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ด Spring REST ๋ฉด์ ์ง๋ฌธ๋ค์ด ๋ง์์ ๋์ ๋ค๋ฉด ๊ณต์ ํด์ฃผ์ธ์.
P.S. ์คํ๋ง์ ์ฒ์ ์ ๊ทผํ๋ ๋ถ์ด๋ผ๋ฉด ์คํ๋ง ๊ฐ๋ ์ ๊ตฌ์ถํ ์ ์๋ ์ต๊ณ ์ ์คํ๋ง ๊ฐ์๋ฅผ ์ฐพ๊ณ ์๋ค๋ฉด Udemy์ ์ด๋ณด์๋ฅผ ์ํ ์คํ๋ง๊ณผ ํ์ด๋ฒ๋ค์ดํธ(์คํ๋ง ๋ถํธ ํฌํจ) ๊ฐ์๋ฅผ ๊ฐ๋ ฅํ ์ถ์ฒํฉ๋๋ค. ์ด ๊ฐ์ข๋ ์คํ๋ง, ํ์ด๋ฒ๋ค์ดํธ, ์คํ๋ง ๋ถํธ ๋ชจ๋๋ฅผ ๋ค๋ฃน๋๋ค.