장고 개발 질문

조회수 401회

장고로 웹사이트를 개발중에 어덯게 해야할지 감도 안잡혀서 질문해 봅니다. 현재 만들고 있는 웹 사이트기능은 게시판기능인데, 그 게시판을 여러 url로 나누어 줘야합니다. 회원가입을 할때 아이디, 비밀번호, 학교정보를 받고 로그인을 하면 그 학교에 맞는 특정한 페이지로 이동시켜 줘야하는데 현재 로그인 기능까지는 완료하였는데 학교 정보를 계정정보와 어덯게 같이 저장해야하고 그걸 로그인에서 일치하는지 확인할때 어덯게 꺼내야 할지 모르겠습니다. 도와주세요 ㅜㅜ

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 태그에 django를 달아주셨는데 이 문제는 django는 아무 관계가 없고 사실은 서비스 설계(아키텍처) 수준으로 올라가는 문제입니다. 혹시 회원가입을 할 때 학교 정보 입력 받는 걸 "온곡초등학교" 같은 단순 문자열 입력으로 처리하고 계신가요? 그러면 그건 큰일났습니다.

    전형적으로, 다음과 같이 합니다.

    1. DB에 school이라는 테이블이 있어야 합니다. 그 테이블에는 최소한 int id, varchar name 2개의 컬럼이 있어야 합니다.
      • 그리고 user 테이블과 board 테이블에는 school_id라는 컬럼이 있어서, school 테이블의 id컬럼을 참조하도록 외래키 제약을 주어야 합니다.
    2. 회원가입을 받을 때는 DB에 존재하는(즉, 서비스가 그 존재를 알고 있는) 모든 학교 목록을 제공하고 이 중에서 하나 선택하게 합니다. SELECT id, name FROM school 쿼리 결과를 받아서 foreach 돌면서 <option value={% id %}>{% name %}</option> 하는 식으로 뿌리면 되겠죠.
      • "찾는 학교가 없나요?"라는 링크가 있어서, 누르면 새 창이 열리고, 적당히 school 테이블에 INSERT 할 수 있는 폼이 나온다거나 하면 좋겠지요.
    3. 회원가입을 실행하는 순간, INSERT INTO user (username, password, school_id) VALUES ('foobar', '$2$ssdwt153dbc', 3)과 같은 쿼리가 실행되어야 합니다. 여기서 school_id 컬럼에 3이 입력되었으므로, 이 foobar 유저 자료는 school 테이블의 3번째 자료에 해당하는 학교와 관계가 있는 자료가 됩니다.
    4. 그러면 이제 로그인을 하면 그 사용자의 school_id를 알 수 있고, 이로부터 그 사용자의 schoolid를 알 수 있습니다. 그러면 그 id를 가지고 SELECT * FROM board WHERE school_id = 3 쿼리를 실행함으로써, 3번째 학교의 board 자료를 가져오게 됩니다.
      • 이게 바로 "로그인을 하면 그 학교에 맞는 특정한 페이지로 이동시켜 주"는 작업입니다.
    5. 사실 여기까지가 해결이 되면, "게시판을 여러 url로 나누어 주"는 작업은 별게 아닙니다. http://foo.bar/board?school=3 같은 식으로 받으면 될 테니까요. (더 멋진 방법이 많이 있겠습니다만)

    설명이 좀 장황하긴 한데 그나마도 위의 시나리오는 최소한도로 제시한 것입니다. 리얼 월드 시나리오는 훨씬 더 복잡합니다. (한 학교에 게시판이 여러 개일 수 있다면? 한 회원이 초등학교 중학교 고등학교 대학교 모두 게시판을 쓰고 싶다면? 전학을 다녔다면? 어떤 게시판의 어떤 글은 외부인도 읽을 수 있도록 하려면? 특정 학교 게시판의 운영자를 지정하려면?)

    생각할 거리는 많은데 일단은 DB의 관계(relationship)라는 것을 배우시고 그걸 현재 개발중인 django 애플리케이션에 어떻게 적용할지 고민해 보세요. 하실 수 있어요.

    • 정말 정성스러운 답변 감사합니다. 제가 아직 고등학생이라 웹이나 데이터베이스를 배운적이 없고 django도 이 웹을 만들기 시작하면서 처음 배우게 되었는데요 답변에 써주신데로 데이터베이스 관계에 대해 공부가 필요할것 같아요. 근데 제가 어떤 부분을 공부해야 할지 잘 모르겠는데 혹시 추천해주실 자료가 있으신가요? 그리고 답변내용을 보니 제가 단기간에 개발하기에는 난이도가 높아 보이는데 웹의 기능이 떨어지더라도 더 쉬운방법을 사용하는 프로그램의 수정방안에 있을까요? 질문이 많아서 죄송한데요 혹시 답변자님은 지금까지 프로그래밍을 해오시면서 이런식으로 난제에 직면하면 어떤식으로 해결을 하셨나요? 질문이 많아져서 죄송해요 답변 정말 많이 도움 됐어요 알 수 없는 사용자 2019.12.23 03:42
    • 몰라서 그러는 것이지 난제가 아니에요...모르면 공부하면 되구요. 한번에 되는 것은 없으니까요 천천히 하나씩 익히면 됩니다. 당연히 단기간에 하겠다는 것은 욕심입니다. 일단 가장 기초적인 관계형 데이터베이스 서적부터 읽으세요. 그러면 구체적인 질문거리가 생길겁니다. 정영훈 2019.12.23 10:22

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)