분류 전체보기 8

캐시

우리는 매일같이 웹사이트나 유튜브, 온라인 게임 등을 통해 이미지, 동영상, 웹 페이지 코드와 같은 대량의 데이터를 서버로부터 전송받는다. 이러한 데이터 전송에는 시간이 소요될 뿐만 아니라 통신비도 지출된다. 고화질 동영상처럼 크기가 큰 데이터일수록 비용은 더욱 커진다. 그러나 한 번 전송받은 데이터는 저장해 놨다가 다시 사용할 때 꺼내  쓴다면 반복적으로 서버에 데이터 전송을 요청할 필요가 없다. 이때 사용되는 기술이 캐시이다. 캐시 덕분에 우리는 반복적으로 사용하는 콘텐츠를 빠르게 이용할 수 있고 데이터 사용량도 줄일 수 있다. 일반적으로 사용자 입장에서 가장 가까이 접하는 캐시는 브라우저 캐시이다. 사용자가 컴퓨터나 스마트폰에서 인터넷 서핑할 때 받아온 데이터는 브라우저에 캐시 형태로 저장된다. 캐..

코딩 2025.02.06

토큰

세션 방식에서 서버는 요청마다 함께 딸려 오는 세션 아이디를 바로바로 확인할 수 있도록 로그인한 사용자의 아이디를 메모리에 올려둔다. 메모리에 올려둔 데이터는 빠르게 확인할 수 있다는 장점이 있는 대신 공간이 한정되어 있다. 서버에 동시 접속하는 사용자가 많아지면 메모리 공간이 부족해져서 서버에 부하가 걸리고 화면이 움직이지 않는 문제가 발생할 수 있다. 메모리 공간을 많이 차지하는 세션 방식의 대안은 로그인한 사용자에게 세션 아이디 대신 토큰을 발급해주는 것이다. 이러한 토큰에는 특수한 수학적 원리가 적용되어 있어서 마치 위조 방지 장치가 있는 지폐처럼 서버만이 유효한 토큰을 발행할 수 있다. 그렇기 때문에 토큰을 받아간 사용자가 이를 쿠키로 저장해 두고 필요할 때마다 제시하면 서버는 따로 메모리에 올..

코딩 2025.02.03

세션

웹사이트에 아이디와 비밀번호를 입력해서 로그인하면 해당 사이트의 회원에게만 허용된 기능들을 사용할 수 있다. 마이페이지를 클릭해서 내 정보를 볼 수도 있고, 회원 전용 게시판의 글쓰기 버튼을 클릭해서 질문을 남기거나 리뷰를 쓸 수도 있다.  문제는 이와 같은 클릭 하나하나는 매번 서버에게 새로 보내는 익명 편지와도 같아서 사이트에 로그인을 하는 등의 이전 행동들과 연결되어 있지 않다는 것이다. 다시 말해 서버는 아이디와 비밀번호를 입력해 로그인에 성공한 사용자와 로그인한 다음 마이페이지 버튼을 누른 사용자가 동일 인물임을 알지 못한다는 것이다. 그렇기 때문에 사용자가 사이트에 로그인한 상태라는 점을 서버에 인증하지 못하면 클릭을 할 때마다 반복해서 아이디와 비밀번호를 서버에 제공해야 한다. 이런 번거로움..

코딩 2025.02.01

쿠키

웹 서핑을 하면서 어떤 사이트에 들어가면 쿠키를 설정하라는 문구를 본 적이 있을 것이다.이 쿠키 때문에 쇼핑 사이트에 로그인하지 않아도 장바구니에 물건을 담아두거나 검색 기록에서 이전에 입력했던 검색어들을 찾아볼 수 있다. 웹 서핑 내역이 마케팅과 광고에 활용되는 것도 쿠키를 통해 이뤄지는 일이다. 쿠키는 크롬이나 사파리같은 브라우저에 저장되는 작은 텍스트 조각이다. 사용자는 브라우저의 설정 화면이나 개발자 도구에서 쿠키를 확인하고 수정, 삭제할 수 있다. 다만 쿠키는 당사자뿐만 아니라 제 3자가 조회하는 것도 가능하기 때문에 개인 정보를 담은 내용이나 보안 상 민감한 정보를 저장하는 데에는 적합하지 않다. 따라서 혹여 남에게 탈취되거나 사용자에 의해 조작되어도 크게 문제되지 않을 정보를 브라우저에 저장..

코딩 2025.01.30

[트러블 슈팅] java.sql.SQLSyntaxErrorException

Java로 게시판을 구현하는 프로그램에서 예외가 발생했다.    예외 메시지를 분석해보니 조건절의 값을 ?로 대체한 매개변수화된 SQL문을 String 타입 변수 sql에 대입하는 부분에서 예외가 발생한 것 같았다. 하지만 아무리 찾아봐도 오타나 논리적인 오류는 없었다. 한참을 고민한 끝에 예외가 발생한 원인을 찾아냈는데 그것은 바로 공백이었다. "SELECT bno, btitle, bcontent, bwriter, bdate" + "FROM boards"  이 부분에서 두번째와 네번째 쌍따옴표 직전에 띄어쓰기로 공백을 만들어야 하는데 공백이 없어서 예외가 발생한 것이다. 즉, "SELECT bno, btitle, bcontent, bwriter, bdate " + "FROM boards " 이렇게 되어..

코딩 2025.01.30

병렬 처리와 병행 처리

프로그램이란 '어떤 일을 수행하기 위해 만들어진 명령 모음'이다. 달리 말하자면, 명령의 모음이 파일로 빌드되어 보조 기억 장치에 저장되어 있는 정적인 상태라고 할 수 있다. 프로그램 실행 명령이 내려지면 CPU는 보조 기억 장치에서 꺼내 메인 메모리에 올려놓고 코드를 해석하며 작업을 시작한다. 이처럼 프로그램이 메인 메모리로 올라와 실행되고 있는 상태를 프로세스라고 한다. 병렬 처리는 여러 작업을 동시에 실행하는 방법이다. 2개 이상의 코어가 각기 다른 프로세스의 명령을 실행해서 각 프로세스가 같은 순간에 실행되도록 하는 방법이다. 병행 처리는 하나의 코어가 여러 프로세스를 돌아가면서 조금씩 처리하는 것이다. 병행 처리란 작업을 조금씩 나누어 실행하면서 컴퓨터가 마치 여러 작업을 동시에 실행하는 것처럼..

코딩 2024.07.05

소프트웨어 개발의 단계

아이템 선정  -> 요구사항 분석 -> 설계 -> 구현 -> 테스트 -> 배포 아이템 선정: 어떤 서비스를 만들지 다양한 정보에 근거하여 아이템을 선정하는 과정이다. 요구사항 분석: 앞에서 선정한 서비스에 필요한 사항들을 도출, 분석, 검증하여 앞으로의 개발 과정에 기준이 될 문서를 만들어 내는 과정이다. 설계: 앞에서 정의한 기능들을 데이터 레벨까지 상세하게 분석하여 좀 더 효율적으로 개발할 수 있도록 그 구조를 잡는 과정이다. 구현: 앞에서 한 설계를 바탕으로 실제 컴퓨터가 이해할 수 있는 언어로 소프트웨어를 작성하는 과정이다.  테스트: 앞에서 작성한 소프트웨어가 에러 없이 잘 돌아가는지 검증하는 과정이다. 배포: 테스트까지 마친 구현체를 사용자가 직접 사용해볼 수 있도록 사용자가 접근 가능한 영역..

코딩 2024.07.02

컴파일러 방식의 언어와 인터프리터 방식의 언어

프로그래밍 언어는 반드시 기계어로 번역해야만 기계에서 실행할 수 있다. 번역하는 방식에 따라 컴파일러 방식의 언어와 인터프리터 방식의 언어로 구분된다.  컴파일러 방식의 언어는 외국어로 된 원서를 오랜 시간에 걸쳐 처음부터 끝까지 번역한 후에 출판하는 번역서에 비유할 수 있다. 책 한 권을 모두 번역해야 하므로 작업이 꽤 오래 걸리지만 한 번만 완벽하게 번역해놓으면 더 이상 번역 작업이 필요 없다. 컴파일러 방식의 프로그래밍 언어는 처음부터 끝까지 코딩을 모두 마친 후에 번역 작업을 거쳐서 프로그램을 실행하게 된다. 만일 수백만 줄의 코딩 중에서 단 한 줄의 오류라도 있으면 이 프로그램은 제대로 번역되지 않는다. 반면 인터프리터 방식의 언어는 실시간으로 나오는 영어 뉴스를 우리말로 한 문장 한 문장씩 동..

코딩 2024.07.01