게시판 구현시 첨부파일의 전달을 어떻게 묶을 수 있을까요?

gurumong의 이미지

웹은 아니고 앱을 통해서 게시판이 구현되어있습니다
아마 통신의 관점에서 보았을때 특별히 다르지는 않다고 생각되는데요

우선 구현된 게시판에 대해서 설명드리면...
게시판에 첨부파일이 있는 게시물을 작성하면 두단계의 통신을 거쳐서 보내게 되는데요
우선 첫번째 HTTP 연결을 열어서 게시물의 내용(제목, 본문)을 json 형태로 보냅니다
전송이 완료되면 이어서 두번째 HTTP 연결을 새로 열고 첨부파일을 보내는 식입니다
그리고 이러한 통신은 모두 별도의 스레드에서 수행되거든요

여기서 문제가 발생하는데
모든 통신이 백그라운드에서 별도의 스레드에서 처리하기 때문에
게시물 작성 완료 버튼을 누르는 즉시 논블럭킹 상태로 사용자가 다른 작업을 할 수 있게 됩니다
게시물의 업로드가 완료되기까지 지루하게 기다리지 않아도 된다는 장점이 있긴한데
게시판으로 돌아왔을때 이때 미쳐 딸린 모든 첨부파일의 업로드를 완료하지 못한 게시물이 먼저 보인다는 문제가 있습니다

게시판이라는게 워낙 널리 쓰이고 발생가능한 문제들에 대해서 해결 방법도 있을꺼 같은데
어떤 해결 방법이 있을까요? ㅜ.ㅜ

raymundo의 이미지

유명한(?) 게시판 코드들이 어떤 식으로 구현했을지는 모르겠습니다만,

업로드가 완료되지 않은 게시물이 보이는 것 자체가 문제라면 서버 쪽에서 아직 업로드를 받고 있는 게시물은 목록 페이지에 나오지 않도록 해버리면 그만일 것 같고요.

일단 목록에는 보이도록 하되(글쓴이 입장에서도 자기가 쓴 글이 안 보이면 그러니까) 첨부 파일 부분 처리를 어떻게 해야 할지가 문제라면... 일단은 게시물 보기에 들어갔을 때 서버에서 내려받는 정보 중에 첨부 파일 상황을 추가하고(없음/업로드 중/업로드 완료), 웹소켓 같은 것을 써서 완료가 되었을 때 클라이언트로 통보해주게 하든가, 아니면 클라이언트 쪽에서 현재 업로드 중일 경우는 AJAX 같은 걸로 몇 초 간격으로 다시 요청을 보내어서 정보를 갱신하다가 완료라는 값을 받으면 그때 화면에 표시해주는 식으로 할 수도 있을 것 같네요.

좋은 하루 되세요!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.