본문 바로가기

분류 전체보기

(381)
[Spring DB] DB 락 🔐 DB 락세션1이 트랜잭션을 시작하고 데이터를 수정하는 동안 아직 커밋을 수행하지 않았는데, 세션2에서 동시에 같은 데이터 를 수정하게 되면 여러가지 문제가 발생한다. 바로 트랜잭션의 원자성이 깨지는 것이다. 여기에 더해서 세션1이 중간에 롤백을 하게 되면 세션2는 잘못된 데이터를 수정하는 문제가 발생한다. 이런 문제를 방지하려면, 세션이 트랜잭션을 시작하고 데이터를 수정하는 동안에는 커밋이나 롤백 전까지 다른 세션에 서 해당 데이터를 수정할 수 없게 막아야 한다.   세션1은 memberA 의 금액을 500원으로 변경하고 싶고, 세션2는 같은 memberA 의 금액을 1000원으로 변경하고 싶다.데이터베이스는 이런 문제를 해결하기 위해 락(Lock)이라는 개념을 제공한다.다음 예시를 통해 동시에 데..
[HTML] Sementic Tag 란? 📖 Sementic Tag란시멘틱 태그(Sementic Tag)에서 Sementic의 사전적 의미는 "의미론적"이라는 뜻으로,HTML에서 시멘틱 태그란 의미를 가지는 태그를 말한다. 가령 제목과 같이 큰 글씨를 나타낼 때 태그를 사용하여 나타낼 수 있다. 태그는 페이지 제목이라는 의미를 갖고 있다.반면 태그에 style을 입혀 태그와 동일한 스타일을 표시할 수 있다. 하지만 이것은 HTML 의미(Sementic)를 제대로 살리지 못한 것 이기 때문에 지양할 필요가 있다.페이지 Layout을 만들거나 HTML 마크업을 할 때 최대한 의미있는 Sementic Tag를 사용하길 권장한다. 장점검색엔진 최적화웹 접근성 향상가독성 향상📖 HTML Sementic Elements : 페이지에 대한 정보를 ..
[Spring DB] 트랜잭션 🪄 트랜잭션 데이터를 저장할 때 단순히 파일에 저장해도 되는데, 데이터베이스에 저장하는 이유는 무엇일까?여러가지 이유가 있지만, 가장 대표적인 이유는 바로 데이터베이스는 트랜잭션이라는 개념을 지원하기 때문이다.트랜잭션을 이름 그대로 번역하면 거래라는 뜻이다. 쉽게 풀어서 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻한다. 그런데 하나의 거래를 안전하게 처리하려면 생각보다 고려해야 할 점이 많다. 예를 들어서 A의 5000원을 B에게 계좌이체한다고 생각해보자. A의 잔고를 5000원 감소하고, B의 잔고를 5000원 증가해야한다.5000원 계좌이체A의 잔고를 5000원 감소B의 잔고를 5000원 증가 계좌이체라는 거래는 이렇게 2가지 작업이 합쳐져서 하나의 ..
[Spring DB] 커넥션 풀과 데이터 소스 🛁 커넥션 풀데이터베이스 커넥션을 매번 획득  데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회한다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달한다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성한다.DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 많이 소모되는 일이다.DB는 물론이..
[HTML] HTML 기본 태그 ✏️ 글꼴 태그  ~ Heading웹 페이지의 제목 또는 부제목을 표현할 때 사용하며, 숫자가 작을 수록 큰 제목을 표시하는 데 사용한다.  Paragraph하나의 문단을 표시할 때 사용한다.  Horizontal Rule가로로 선을 긋는 태그이다. (종료태그 없음)  Break줄바꿈 태그로 HTML에서 개행 역할을 합니다. (종료태그 없음)  Italic텍스트를 이텔릭체로 표시할 때 사용한다.  Emphasis텍스트를 이텔릭체로 강조할 때 사용한다.  Bold텍스트를 진하게 표시할 때 사용한다. 텍스트를 진하게 강조할 때 사용한다.📄목록 태그 Ordered List순서가 있는 목록을 표현할 때 사용한다.type 속성으로 글머리 기호를 변경할 수 있다.  Unordered Lists순서가 없는 목록을..
[Spring DB] JDBC 를 이용하여 CRUD 구현하기 🗄️JDBC 등장 이유애플리케이션을 개발할 때 중요한 데이터는 대부분 데이터베이스에 보관한다. 클라이언트, 애플리케이션 서버, DB 클라이언트가 애플리케이션 서버를 통해 데이터를 저장하거나 조회하면, 애플리케이션 서버는 다음 과정을 통해서 데이터베이스를 사용한다.  1️⃣ 애플리케이션 서버와 DB - 일반적인 사용법커넥션 연결: 주로 TCP/IP를 사용해서 커넥션을 연결한다.SQL 전달: 애플리케이션 서버는 DB가 이해할 수 있는 SQL을 연결된 커넥션을 통해 DB에 전달한다.결과 응답: DB는 전달된 SQL을 수행하고 그 결과를 응답한다. 애플리케이션 서버는 응답 결과를 활용한다. 2️⃣ 애플리케이션 서버와 DB - DB 변경 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL을 전달하는 ..
[HTML] Emmet 💡Emmet 이란?Emmet은 HTML과 CSS의 자동완성 기능을 제공하여, 작성 시간을 아주 빠르게 단축 시켜주는 확장 기능이다.  ✍ HTML Emmet  1️⃣ HTML 표준 구조   ! 입력 후 Tab키 : 간단하고 빠르게 HTML 기본구조를 만들어 준다.    2️⃣ 자식노드 >  div>ul>li 입력 후 Tab키 : >를 사용하여 자식 요소를 생성할 수 있다.    3️⃣ 형제노드 +  div>ul+ol+div 입력 후 Tab키 : +를 사용하여 한 요소와 같은 단계에 위치한 요소를 생성할 수 있다.    4️⃣ 반복하기 *  div>ul>li*3 입력 후 Tab키 : *를 사용하여 요소를 반복해서 생성할 수 있다.    5️⃣ 클래스 부여..
[MVC] 파일 업로드 📚 목차파일 업로드 소개서블릿과 파일 업로드스프링과 파일 업로드파일 업로드, 다운로드 📁 파일 업로드 소개일반적으로 사용하는 HTML Form을 통한 파일 업로드를 이해하려면먼저 폼을 전송하는 다음 두 가지 방식의 차이를 이해해야 한다.  HTML 폼 전송 방식application/x-www-form-urlencodedmultipart/form-data 💡 application/x-www-form-urlencoded 방식은 HTML 폼 데이터를 서버로 전송하는 가장 기본적인 방법이다.  Form 태그에 별도의 enctype 옵션이 없으면 웹 브라우저는 요청 HTTP 메시지의 헤더에 다음 내용을 추가한다.Content-Type: application/x-www-form-urlencoded그리고 폼에 ..
[MVC] 스프링 타입 컨버터 목차스프링 타입 컨버터란?타입 컨버터 - Converter컨버전 서비스 - ConversionService스프링에 Converter 적용하기뷰 템플릿에 컨버터 적용하기포맷터 - Formatter포맷터를 지원하는 컨버전 서비스포맷터 적용하기스프링이 제공하는 기본 포맷터 🍃 스프링 타입 컨버터 소개문자를 숫자로 변환하거나, 반대로 숫자를 문자로 변환해야 하는 것 처럼 타입을 변환해야 하는 경우가 상당히 많다. 문자 타입을 숫자 타입으로 변경@RestControllerpublic class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request) { // 문자 타입으로 조회 ..
[MVC] API 예외 처리 @ExceptionHandler 목차API 예외 처리 - 시작API 예외 처리 - 스프링 부트 기본 오류 처리API 예외 처리 - HandlerExceptionResolver API 예외 처리 - 스프링이 제공하는 ExceptionResolverAPI 예외 처리 - @ExceptionHandlerAPI 예외 처리 - @ControllerAdvice ✍ API 예외 처리 - 시작 🤔 API 예외 처리는 어떻게 해야할까?HTML 페이지의 경우 4xx, 5xx와 같은 오류 페이지만 있으면 대부분의 문제를 해결할 수 있다.그런데 API의 경우에는 생각할 내용이 더 많다. 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다.지금부터 API..